2016-11-10 38 views
0

我有一個UITableView,我填充自動調整單元格。 UITableView設置是相當簡單:UITableViewCell佈局不更新,直到單元格被重用

tableView.estimatedRowHeight = 70 
    tableView.rowHeight = UITableViewAutomaticDimension 

酷似蘋果建議在這裏:https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/AutolayoutPG/WorkingwithSelf-SizingTableViewCells.html

要啓用自調整大小表視圖細胞,必須設置表視圖的 rowHeight屬性來UITableViewAutomaticDimension。您還必須 將值分配給estimatedRowHeight屬性。一旦 這兩個屬性被設置,系統就會使用自動佈局來計算 行的實際高度。

配置單元格時,我還禁用/啓用了一些約束條件來實現所需的外觀。這就是事情變得有趣的地方。單元格佈局不會更新,直到單元格被重用。從字面上看。您可以撥打layoutIfNeeded()setNeedsLayout(),layoutSubviews()或任何其他方法,您不會強制單元格更新其佈局。

其他各方面的工作還不錯:標籤不改變自己的文字,隱藏/取消隱藏的意見,但直到電池被重用佈局被卡住。

問題:是什麼原因造成的,以及如何避免這種行爲?

回答

0

對我來說,這個問題是由estimatedRowHeight引起的。

只需刪除該行

tableView.estimatedRowHeight = 70 

固定我的問題。單元格正確地更新了它的佈局,它幾乎解決了我的問題

但是,最有可能的,你會得到另一個麻煩,你的細胞的高度被設定爲43.5點。您登錄也將充滿了自動佈局錯誤,這將包括這樣

<NSLayoutConstraint:0x600000097570 'UIView-Encapsulated-Layout-Height' UITableViewCellContentView:0x7fd4ee511d20.height == 43.5 (active)> 

顯然,一條線,如果你不提供estimatedRowHeight,表視圖把你的單元格的內容視圖中的43.5點高度約束,並如果你的單元格的「內部」高度不匹配(並且它的概率是99.99%),那麼它將把錯誤記錄在日誌中。

如何避免該錯誤?我還不知道。 我發佈了一個關於該問題的問題,只要我找到答案,我會在這個問題中提供一個鏈接。

相關問題