2017-08-03 163 views
0

我想設置UITableViewCell的高度取決於UILabel的高度。
我的問題類似於this one
但在該答案的OC代碼似乎已被棄用(我不知道,只是無法找到它)。
我使用下面的代碼來計算標籤的高度。如何計算UILabel的高度?

extension String { 
    // the length of text in one line 
    func size(ofFont font: UIFont) { 
     return (self as NSString).size(attributes: [NSFontAttributeName: font]) 
} 

cellForRow:方法:

let size = text.size(ofFont: font) 
let height = ceil(size.width/(UIScreen.main.bounds.width))*size.height 

但是,這將是額外的分界線,如果最後一個單詞太長,在一行中顯示。
所以,這裏出現了錯誤。
謝謝你的任何建議。

+0

更好地使用自動尺寸。 –

+0

爲什麼不使用動態單元格大小? –

+0

你可以設置約束它很容易 – Jaydip

回答

3

在斯威夫特3

set BackgroundView約束如領先,尾隨,頂部,底部,請顯示圖像。

enter image description here

設置的UILabel約束像前置,頂部,底部

,並設置其屬性numberOfLines = 0

enter image description here

,之後你viewController類ViewDi dLoad方法寫這段代碼。

override func viewDidLoad() { 
     super.viewDidLoad() 
     //dynamic tablview 
     yourTablview.estimatedRowHeight = 83.0 
     yourTablview.rowHeight = UITableViewAutomaticDimension 
    } 

我希望它適合你。

+0

我的回答很有幫助,請給予upvote和Right – Jaydip

+0

謝謝,我已經爲標籤設置了限制。 'UITableViewAutomaticDimension'是我所需要的。再次感謝您的詳細解答。 – JsW

+0

我遇到了新問題,需要您的幫助。如果我設置了UITableViewAutomaticDimension,集合視圖的高度將爲0。如果我爲單元格設置了固定的高度,集合視圖就可以很好地工作。集合視圖是從故事板中初始化並在自定義的TableViewCell中設置的。 – JsW

3

您應該使用UITableViewAutomaticDimension

tableView.rowHeight = UITableViewAutomaticDimension 
tableView.estimatedRowHeight = 140 

而且你還要設置numberOfLines

cell.label.numberOfLines = 0 

不要忘了在各方面設置的限制

+0

謝謝你,'UITableViewAutomaticDimension'是我所需要的。 – JsW

+0

我有一個新問題,需要您的幫助。如果我設置了UITableViewAutomaticDimension,集合視圖的高度將爲0。如果我爲單元格設置了固定的高度,集合視圖就可以很好地工作。集合視圖是從故事板中初始化並在自定義的TableViewCell中設置的。謝謝。 – JsW

+0

@CallOfOrange讓我們在[聊天]中解決這個問題(https://chat.stackoverflow。com/rooms/151072/phyber-and-calloforange) – Phyber