使用 AutoLayout 获得 UILabel Width 很热?
Posted
技术标签:
【中文标题】使用 AutoLayout 获得 UILabel Width 很热?【英文标题】:Hot to get UILabel Width using AutoLayout? 【发布时间】:2013-12-15 01:01:56 【问题描述】:我可能在这里遗漏了一些非常微不足道的东西,但我不知道如何获得我的 UILabel 的宽度。请注意,它是以编程方式添加的,并且它的大小适合其中的文本(文本从 2 到 35 个字符不等)。它会自动适合其内容的正确宽度,但我需要获取宽度。
我将其添加到屏幕的代码:
UILabel *textLabel = [[UILabel alloc] init];
textLabel.text = textInputFromUser;
textLabel.textColor = [UIColor whiteColor];
textLabel.backgroundColor = [UIColor colorWithRed:40.0/255.0 green:40.0/255.0 blue:40.0/255.0 alpha:0.95];
textLabel.translatesAutoresizingMaskIntoConstraints = NO;
[self.view addSubview:textLabel];
请注意,以下代码(带有“Bounds”/“Frame”)始终返回 0.00):
NSLog(@"textlabel width: %f", textLabel.bounds.size.width);
【问题讨论】:
你试过textLabel.frame.size.width
吗?
是的,看第二个代码 sn-p
【参考方案1】:
您只能在第一次布局传递后找出大小。所以要么等待,要么打电话
[textLabel layoutIfNeeded];
立即布局。之后,应该将框架设置为正确的值。
【讨论】:
【参考方案2】:既然没有人回答,那我就给我两分钱……
我认为您无法获取标签框架的原因是该框架在技术上尚未实例化;但是,也许仅仅获取内容的大小就足以满足您的需求。
这里有一篇文章解释了如何使用 boundingRectWithSize:options:attributes:context: 来获取标签中文本的大小:https://***.com/a/18961502/2274694
【讨论】:
我无法正常工作。我想我会根据我的 UILabel 中有多少个字符进行计算。不是最佳的,但可能会工作【参考方案3】:尝试使用虚拟框架初始化标签,如下所示:
UILabel *textLabel = [[UILabel alloc] initWithFrame:CGRectMake(0,0,1,1)];
textLabel.text = textInputFromUser;
[textLabel sizeToFit];
或者你可以试试:
UILabel *textLabel = [[UILabel alloc] initWithString:textInputFromUser];
【讨论】:
不幸的是,它仍然返回 0.00 作为框架的宽度以上是关于使用 AutoLayout 获得 UILabel Width 很热?的主要内容,如果未能解决你的问题,请参考以下文章
UItableviewcell中的多行UIlabel使用Autolayout
使用 AutoLayout 在 UITableViewCell 中垂直居中多个 UILabel?
如何设置 UILabel 以通过 AutoLayout 包装 UIButton?
IOS - UIView中使用AutoLayout的UILabel动态高度