UILabel sizeToFit不适用于自动布局ios6



5 Answers

在iOS 6中,如果使用自动布局,如果UILabel的侧面(或宽度)和顶部被固定,它将自动增长和缩小以适应其内容, 完全没有代码,也不会影响其抗压性等等。 它很简单。

在更复杂的情况下,只需设置标签的preferredMaxLayoutWidth

无论哪种方式,正确的事情都会自动发生。

Question

我该如何以编程方式(以及在哪种方法中)配置高度取决于文本的UILabel? 我一直试图使用Storyboard和代码的组合来设置它,但无济于事。 大家在设置lineBreakModenumberOfLines推荐sizeToFit 。 但是,无论我将该代码放在viewDidLoad:viewDidAppear:viewDidLayoutSubviews我都无法使其工作。 要么我把这个盒子放得太小,不能长长的文字,要么我把它做得太大,不缩小。




一种为我工作的解决方案; 如果你的UILabel有一个固定的宽度,在你的界面文件中将约束从constant =改为constant <=




在IOS7 sizetoFit注意到也没有工作 - 也许该解决方案可能也会帮助你

[textView sizeToFit];
[textView layoutIfNeeded];



UIFont *customFont = myLabel.font;
CGSize size = [trackerStr sizeWithFont:customFont
                             constrainedToSize:myLabel.frame.size // the size here should be the maximum size you want give to the label
                                 lineBreakMode:UILineBreakModeWordWrap];
float numberOfLines = size.height / customFont.lineHeight;
myLabel.numberOfLines = numberOfLines;
myLabel.frame = CGRectMake(258, 18, 224, (numberOfLines * customFont.lineHeight));



我已经用xCode6解决了将“首选宽度”设置为自动并将标签顶部,顶部和尾部固定




我觉得我应该贡献一下,因为它花了我一段时间才找到正确的解决方案:

  • 我们的目标是让Auto Layout在不调用sizeToFit()的情况下完成工作,我们将通过指定正确的约束来完成它:
  • 指定UILabel上的顶部,底部和前导/尾部空间约束
  • 将行数属性设置为0
  • 内容拥抱优先级增加到1000
  • 将内容压缩阻力优先级降低到500
  • 在您的底部容器约束上,将优先级降低到500

基本上,发生的事情是,你告诉你的UILabel,即使它有一个固定的高度约束,它可以使得为了拥抱内容而缩小它自身的约束(例如,如果你只有一行),但它不能打破约束使其更大。






Related