23

我试图在一行中的 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 显示:

所以我会尝试分享一些...

我究竟做错了什么?

4

6 回答 6

29

原来代码很好 - 但检查了使用自动布局。取消选中它 - 一切都很好......

于 2013-11-18T08:25:34.253 回答
23

如果您想在打开自动布局的情况下实现这一点,这很简单。只要确保你添加numberOfLines

textLabel.adjustsFontSizeToFitWidth = YES;
textLabel.numberOfLines = 0;
于 2014-07-15T06:55:07.990 回答
4

令人惊讶的是,如果您没有限制标签的宽度,这将起作用:

[textLabel.superview layoutSubviews];

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

于 2015-03-30T05:29:24.217 回答
2

尝试

textLabel.adjustsFontSizeToFitWidth  = YES;
textLabel.minimumFontScale      =  0.5;  
于 2013-11-18T08:24:09.510 回答
1

由于您已将 Label 限制为仅显示一行 Text 并截断其余部分,因此它的行为相同

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

希望对你有帮助

于 2013-11-18T08:17:53.517 回答
1

sizeToFit无法正常工作的最常见原因是UILabel没有任何自动布局约束,例如,如果您隐含地依赖相对于左上角保持固定的视图位置。完全添加任何约束(前导,顶部,中心,任何东西)都会修复它,大概是因为它会导致在layoutSubviews某个时候被调用,正如 Maxthon Chan 的回答中所建议的那样。

于 2016-07-18T17:21:21.020 回答