每次我的一個自定義UITableViewCells被tableView繪製時:cellForRowAtIndexPath:控制檯吐出一堆NSLayoutConstraint不一致。我理解這些大多數:如何修復奇怪的NSLayoutConstraint錯誤,似乎不會影響自定義UITableViewCell中的佈局
Unable to simultaneously satisfy constraints. ...boring stuff..
"<NSLayoutConstraint:0x8b0eb60 V:|-(NSSpace(20))-[UILabel:0x8b0cb30] (Names: '|':UITableViewCellContentView:0x8bd7d40)>",
"<NSLayoutConstraint:0x8b0db70 V:[UILabel:0x8b0cb30]-(NSSpace(8))-[UITextView:0x91dba00]>",
"<NSLayoutConstraint:0x8b0dba0 V:[UITextView:0x91dba00]-(NSSpace(20))-| (Names: '|':UITableViewCellContentView:0x8bd7d40)>",
"<NSLayoutConstraint:0x8b0d5a0 V:[UITextView:0x91dba00(1000)]>",
"<NSAutoresizingMaskLayoutConstraint:0x8b00330 h=--& v=--& V:[UITableViewCellContentView:0x8bd7d40(44)]>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x8b0db70 V:[UILabel:0x8b0cb30]-(NSSpace(8))-[UITextView:0x91dba00]>
或者至少我認爲我這樣做。讓我感到困惑的是,我的UITableViewCell正在工作,沒有任何約束似乎被打破。我認爲錯誤中列出的一些限制,特別是最後一個,是系統添加的限制條件。如果我不使用.xibs並且只在代碼中添加約束,這可能嗎?錯誤的最後一行特別介紹給我,因爲我爲每個代碼動態生成高度,但是我注意到了那裏的44,默認的單元格高度。
默認情況下是否添加了這些限制中的一部分,例如,當我撥打[super updateConstraints]
時?我將如何着手解決這些錯誤或找出他們來自哪裏?
在附註上,我明白浸入Core Text的性能比我的UITextView + Auto Layout解決方案要好得多。目前我正在研究緩存細胞高度。但是,這些佈局錯誤是否會在滾動時造成延遲,或者僅僅是因爲我使用自動佈局來計算屏幕上出現的每個單元格高度?
我已經發布the project in which these errors are occurring on Github如果有人想下載並體驗自己的古怪。
當您的UITableViewCell的高度爲44,這是它的默認高度時,這些約束不能全部滿足。您可以通過手動指定大於20 + 8 + 20 + 1000 +標籤內在尺寸高度的默認高度來消除這些錯誤。或者,如果手動計算高度後沒有看到它們,您可以忽略它們。 –
順便提一下,你可能想避免在UITableViewCell中使用自動佈局,因爲它是差(滾動)滾動性能的常見原因。 –
@AaronBrager我得到它的工作,但將單元格的contentView.frame.height設置爲initWithStyle中的一個大常量:prepareForReuse :.謝謝你的幫助! –