使用 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动态高度

在iOS中使用autolayout调整内容大小的UILabel

为啥我的 UILabel 的 AutoLayout 不起作用