UILabel sizeToFit不適用於自動佈局ios6



Answers

在iOS 6中,如果使用自動佈局,如果UILabel的側面(或寬度)和頂部被固定,它將自動增長和縮小以適應其內容, 完全沒有代碼,也不會影響其抗壓性等等。 它很簡單。

在更複雜的情況下,只需設置標籤的preferredMaxLayoutWidth

無論哪種方式,正確的事情都會自動發生。

Question

我該如何以編程方式(以及在哪種方法中)配置高度取決於文本的UILabel? 我一直試圖使用Storyboard和代碼的組合來設置它,但無濟於事。 大家在設置lineBreakModenumberOfLines推薦sizeToFit 。 但是,無論我將該代碼放在viewDidLoad:viewDidAppear:viewDidLayoutSubviews我都無法使其工作。 要么我把這個盒子放得太小,不能長長的文字,要么我把它做得太大,也不會縮小。




在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));



一種為我工作的解決方案; 如果你的UILabel有一個固定的寬度,在你的界面文件中將約束從constant =改為constant <=




我已經用xCode6解決了將“首選寬度”設置為自動並將標籤頂部,頂部和尾部固定




我覺得我應該貢獻一下,因為它花了我一段時間才找到正確的解決方案:

  • 我們的目標是讓Auto Layout在不調用sizeToFit()的情況下完成工作,我們將通過指定正確的約束來完成它:
  • 指定UILabel上的頂部,底部和前導/尾部空間約束
  • 將行數屬性設置為0
  • 內容擁抱優先級增加到1000
  • 將內容壓縮阻力優先級降低到500
  • 在您的底部容器約束上,將優先級降低到500

基本上,發生的事情是,你告訴你的UILabel,即使它有一個固定的高度約束,它可以使得為了擁抱內容而縮小它自身的約束(例如,如果你只有一行),但它不能打破約束使其更大。






Links