2016-09-15 28 views
0

我有以下代碼來設置一個UILabel:當設置爲自動換行如何獲得的UILabel文本的實際寬度

let label = UILabel() 
label.numberOfLines = 0 
label.textAlignment = .center 
label.lineBreakMode = .byWordWrapping 
label.preferredMaxLayoutWidth = maxWidth 

label.text = "String that is long enough to cause word wrap." 

label.sizeToFit() 
self.view.addSubview(label) 

,我需要的是爲標籤自動換行,因爲它會結果一旦達到label.preferredMaxLayoutWidth,然後實際上將自己的大小足夠寬以適應包裝文本。下面是一個圖解說明: enter image description here

紅框的寬度等於label.preferredMaxLayoutWidth,這就是我用上面的代碼得到的實際大小。 黑盒子是我希望它的大小。 無論標籤的大小是紅色還是黑色,換行字都是一樣的。

那麼,如何在保持當前文字換行的同時將我的標籤大小調整爲儘可能小的寬度?

編輯:

雖然限制可能是通常的選擇,在我的情況,我不認爲這是因爲我根據所得到的這個標籤的尺寸大小我的上海華。

+0

您是否在尋找[平空間(http://www.thedesigncubicle.com/2008/12/tiny-tutorial-improve -justified型的設置/)? (請參閱*添加刷新空間部分*) – paulvs

+0

使用'NSString boundingRectWithSize:options:attributes:context:'(或String的Swift等效項)來獲取所需的字符串大小。 – rmaddy

+0

@paulvs不,我不認爲這是說同樣的事情。 –

回答

1

好吧,我只是想通了。 @rmaddy在上面的問題評論中是正確的。在問這個問題之前,我已經看過boundingRectWithSize:options:attributes:context:,但很快就發現問題了。但現在我明白了。這是我更新的代碼:

讓利標籤=的UILabel()

let text = "String that is long enough to cause word wrap." 
    let rect = text.boundingRect(with: CGSize(width: maxDesiredWidth, height:CGFloat.greatestFiniteMagnitude), options: NSStringDrawingOptions.usesLineFragmentOrigin, attributes: nil, context: nil) 

    label.numberOfLines = 0 
    label.textAlignment = .center 
    label.lineBreakMode = .byWordWrapping 
    label.frame = rect 

    label.text = text 

    label.sizeToFit() 
    self.view.addSubview(label) 
相關問題