2015-09-28 80 views
6

我正在開發一個iOS項目,但是當我更新到iOS 9時,我在UILabels中有多行問題。我正在使用AutolayoutiOS中UILabel中的多行文字9

任何人都知道如何在iOS 9中做到這一點?

我嘗試不同的方法,如:

textLabel.lineBreakMode = UILineBreakModeWordWrap; 
textLabel.numberOfLines = 0; 

(從其他類似的問題),但沒有奏效。

這是我的邏輯顯示多線:

IB配置:

preferedMaxLayout

enter image description here

label config

編程方式更新該值:

- (void)configureLabelsMaxLayoutWidth 
{ 
    [self.view layoutIfNeeded]; 
    self.titleLabel.preferredMaxLayoutWidth = CGRectGetWidth(self.titleLabel.frame); 
} 

我呼籲viewWillAppear中

+0

究竟發生了什麼?我有類似的標籤在iOS 9中工作。 –

+0

我猜你正在使用AutoLayout並且不限制標籤的寬度?如果它不能使標籤足夠長,它只會包裝標籤。如果標籤可以做得夠長,那麼標籤總是佔用1行。 – Fogmeister

+0

我設置了preferredMaxLa ....:self.titleLabel.preferredMaxLayoutWidth = CGRectGetWidth(self.titleLabel.frame),但結果是一樣的。最後我有一行「...」。 – eljec

回答

6

這種方法通過設置numberOfLines0你告訴標籤要多,但有可能會禁用多線等因素的影響。你在使用自動佈局嗎?如果是這樣,那麼問題可能是標籤Content Compression Resistance Priority太低,請嘗試將其設置爲Required1000

內容壓縮阻力告訴視圖引擎您的標籤可以收縮的優先級。將它設置爲所需的強制它不縮小。

在Interface Builder,只需選擇標籤,點擊Size Inspector(小尺),然後將其更改爲1000。
enter image description here

或者,在代碼中,相當於將是:

[label setContentCompressionResistancePriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical]; 
+0

謝謝西蒙,我沒有( – eljec

0

我有一個類似的問題,我需要在最後調用layoutIfNeeded():

textLabel.text = "your loooooooong text" 
textLabel.lineBreakMode = .ByWordWrapping 
textLabel.numberOfLines = 0 
textLabel.layoutIfNeeded() 
1

設置約束後,請記住preferredMaxLayoutWidth

label.numberOfLines = 0 
label.preferredMaxLayoutWidth = superview.bounds.size.width - 20 
+1

爲我工作!在iOS 10上沒有問題,它可以與設計的自動佈局配置一起工作。在iOS 9上,我必須添加這個preferredMaxLayoutWidth選項。 – Yannick