2016-11-16 62 views
0

我想顯示一個UILabel,可能會佔用多行,但我在調整高度方面存在問題。如何防止UILabel填滿整個屏幕?

這裏是什麼樣子時,我有過一個單行文本,正確顯示:

enter image description here

當文本跨越多行但出現這種情況:

enter image description here

這裏的我正在使用的界面生成器設置:

enter image description here

理想情況下,我希望文本視圖保持在屏幕的頂部,只佔用盡可能多的空間,因爲它需要顯示文本,但我真的不能告訴我哪裏出錯了。

回答

0

使用自動佈局處理文本視圖有點棘手。如果可能,請使用UILabel。如果不是,那麼文本視圖有幾個問題,而最易於管理的解決方案是添加高度約束,然後在代碼中對其進行處理。

文本視圖內容的高度可以被確定爲:

let height = textView.sizeThatFits(textView.frame.size).height 

另外,也可以使用

let height = textView.contentSize.height 

但有時結果不正確。

您確實需要爲文本視圖設置委託,以便在更改時刷新文本視圖的大小。

+0

一旦我擁有了該尺寸,我該怎麼做?爲UILabel設置一個新框架什麼也不做。 – spacitron

+0

對不起,這是爲了UITextView。你的問題必須在其他地方。至於這種用法,您需要一個出口到文本視圖的高度約束,並將其常量設置爲檢索高度的值。 –

0

那麼你確實已經根據你的約束給予它許可。任何高度> 0,只要它距上邊距20。既然你沒有任何其他的觀點立足你的身高關,你可以掛鉤一個出口到標籤中,並使用此:

@IBOutlet weak var label: UILabel! 

override func viewDidAppear(_ animated: Bool) { 
    super.viewDidAppear(animated) 
    label.sizeToFit() 
} 
+0

標籤本身已經做到了。它有一個內容擁抱優先級,默認應該設置爲251。這意味着如果沒有設置約束來限制大小,那麼它將縮小與其內容(文本)允許的一樣多。問題是使用這樣的文本視圖。 –

+0

我在他的示例中設置了約束並運行此代碼。它解決了這個問題。另外,OP詢問UILabel,而不是UITextView。 – Frankie

+0

這並沒有解決我的問題。既不要調用sizeToFit()也不要以編程方式設置標籤的框架。 – spacitron

0
  1. 取消選中「首選寬度」明確複選框(大小督察)
  2. 刪除UILabel上的高度限制。

它肯定會工作。