UILabel sizeToFit方法无法正常工作

时间:2013-11-18 08:01:37

标签: ios objective-c uiscrollview uilabel sizetofit

我正试图在一行内的UILabel中显示一大段文本。 UILabel是UIScrollView的子视图,因此我可以滚动查看整个UILabel。

我的问题是sizeToFit方法只是部分有效。

textLabel.attributedText = attributedString;
textLabel.numberOfLines = 1;
[textLabel sizeToFit];
textScrollView.contentSize = CGSizeMake(textLabel.frame.size.width, textLabel.frame.size.height);

UIScrollView内容大小足以显示整个UILable,但对于以下行:

  

所以我会尝试每隔一段时间在这里分享一些。“

UILabel显示:

  

所以我会尝试分享som ......

我做错了什么?

7 个答案:

答案 0 :(得分:28)

原来代码很好 - 但是检查了Use Autolayout。 取消选中它 - 一切都很好......

答案 1 :(得分:20)

如果你想在启用自动布局的情况下实现这一点,那就很简单了。只需确保添加numberOfLines

即可
textLabel.adjustsFontSizeToFitWidth = YES;
textLabel.numberOfLines = 0;

答案 2 :(得分:4)

令人惊讶的是,如果你没有对标签的宽度施加约束,这将起作用:

[textLabel.superview layoutSubviews];

我通过反复试验了解到了这一点。

答案 3 :(得分:2)

尝试

textLabel.adjustsFontSizeToFitWidth  = YES;
textLabel.minimumFontScale      =  0.5;  

答案 4 :(得分:1)

["Key1"] = {"Value1,Value2,Value3"}; ["Key2"] = {"Value2,Value3,Value4,Value5"}; 无法正常工作的最常见原因是sizeToFit没有任何自动布局限制,例如,如果您隐含地依赖于相对于左上角保持固定的视图位置。添加任何约束(leading,top,centerY,任何东西)都会修复它,大概是因为它会导致UILabel在某个时刻被调用,正如Maxthon Chan的回答所示。

答案 5 :(得分:0)

答案 6 :(得分:0)

由于您已将Label限制为仅显示一行文本并截断其余文本,因此其行为相同

textLabel.attributedText = attributedString;
textLabel.numberOfLines = 0;
[textLabel sizeToFit];
textLabel.lineBreakMode = NSLineBreakByWordWrapping;
textScrollView.contentSize = CGSizeMake(textLabel.frame.size.width, textLabel.frame.size.height);

希望它能帮到你