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显示:

所以我会尽量分享索姆…

我究竟做错了什么?

原来的代码是好的 – 但使用Autolayout被检查。 没有选中它 – 一切正常工作…

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

 textView.adjustsFontSizeToFitWidth = YES; textView.numberOfLines = 0; 

尝试

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

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

 [textLabel.superview layoutSubviews]; 

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

既然你已经限制你的标签显示只有一行文本和截断其余的行为是相同的

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

希望它会帮助你

sizeToFit无法正常工作的最常见原因是UILabel没有任何自动布局约束,例如,如果隐式地依赖于相对于左上方固定的视图位置。 根据Maxthon Chan的回答,build议在任何位置添加任何约束(leading,top,centerY,anything)都可以解决这个问题,大概是因为它会导致layoutSubviews被调用。