2016-03-03 17 views
1

大廈的Xcode 7.2.1,iOS的9.2不正確的UITableViewCell高度與動態UILabels和內容壓縮/電阻

我有一個UITableView,與擁有具有自動高度細胞。

tableView.estimatedRowHeight = 80 
tableView.rowHeight = UITableViewAutomaticDimension 

細胞的佈置如下: UITableViewCell contentView outerStackView - pinned to top, left, right, bottom edges of the contentView with autolayout leftColumnStackView - 38% of width of outerStackView topStackView label UILabel value UILabel bottomStackView label UILabel value UILabel middleColumnStackView - 38% of width of outerStackView ... rightColumnStackView - rest of the width of outerStackView ...

細胞中都有6標籤/值對 - [標籤X:值]。每個標籤/值對由2個UILabel組成,其內容擁抱和內容壓縮抵抗屬性相應地設置以給出期望的外觀。

label.numberOfLines = 0 
label.textAlignment = NSTextAlignment.Left 
label.setContentCompressionResistancePriority(1000, forAxis: .Horizontal) 
label.setContentHuggingPriority(1000, forAxis: .Horizontal) 

value.numberOfLines = 0 
value.setContentCompressionResistancePriority(500, forAxis: .Horizontal) 
value.setContentHuggingPriority(500, forAxis: .Horizontal) 

// there are 6 stack views, each containing a label/value pair 
// the stack views are .Horizontal alignment, and pinned to the 
// columns they sit in 
stackView.addArrangedSubview(label) 
stackView.addArrangedSubview(value) 

但是,有時單元格高度適當的措施本身,其他時間增加了大量的額外空間(足夠有趣的額外空間總是等於空間在那裏,如果內容壓縮/擁抱沒有被添加到任一標籤)。

這裏是發生這種情況的不一致:

有時它是正確的: enter image description here

有時是錯誤的: enter image description here

當我從不過標籤刪除的內容壓縮/電阻,電池是總是正確的高度,但是看起來是這樣的: enter image description here

任何人都有類似的經歷嗎?有什麼建議嗎?

+0

你的約束是什麼樣的? – beyowulf

+0

@beyowulf所以一切都位於堆棧視圖內部的堆棧視圖內。 1個外部堆棧視圖 - > 3個內部堆棧視圖 - >每列內部,2個堆棧視圖,每個內部都有一個標籤/值。我可以在關於結構的問題上添加一些點綴。 – Alex

+0

你在哪裏調用'label.numberOfLines = 0 label.textAlignment = NSTextAlignment.Left label.setContentCompressionResistancePriority(1000,forAxis:.Horizo​​ntal) 標籤。setContentHuggingPriority(1000,for Axis:.Horizo​​ntal)等。 – beyowulf

回答

0

想通了!

這最後不得不與細胞如何的contentView使用自動版式被定位於做。顯然,默認情況下,它沒有正確規劃和計算子視圖的位置。

在我的UITableViewCell子類,添加以下到我的init()

contentView.translatesAutoresizingMaskIntoConstraints = false 
contentView.leadingAnchor.constraintEqualToAnchor(leadingAnchor).active = true 
contentView.trailingAnchor.constraintEqualToAnchor(trailingAnchor).active = true 
contentView.topAnchor.constraintEqualToAnchor(topAnchor).active = true 
contentView.bottomAnchor.constraintEqualToAnchor(bottomAnchor).active = true 

通過釘扎contentView到細胞中,UITableViewCell不一致的高度轉讓問題走了,正確的高度總是顯示。

這導致了contentView被拉伸到所有4個邊,做一些其他的事情(比如當一個UITableView已編輯翻轉true的動畫)的影響,但現在我可以解決在其他方面的問題,因爲沒有任何東西被計算爲錯誤的或正在發生的意外了。

相關問題