2014-11-06 83 views
0

我在iOS 7.1中看到一些奇怪的行爲。在iOS 8中也不會發生這種情況。iOS UITableView AutoLayout約束錯誤,奇怪行爲

加載UITableViewController時,我收到了一堆沒有任何意義的約束錯誤(無法同時滿足約束條件)。我熟悉約束語言和如何調試這些錯誤,但對於我的生活,我無法弄清楚發生了什麼。

我的表有一堆自定義單元格。爲了調試目的,我將單元減少爲一個來隔離約束錯誤。當渲染表看起來是這個顯示的單自定義單元格:

Table cell rendered

約束錯誤是:

"<NSLayoutConstraint:0x7a098570 H:[UIImageView:0x7a0984c0(60)]>", 
"<NSLayoutConstraint:0x7a098aa0 H:|-(8)-[UIImageView:0x7a0984c0] (Names: '|':UITableViewCellContentView:0x7a097ed0)>", 
"<NSLayoutConstraint:0x7a098b30 H:[UILabel:0x7a097f70]-(12)-| (Names: '|':UITableViewCellContentView:0x7a097ed0)>", 
"<NSLayoutConstraint:0x7a098b60 H:[UIImageView:0x7a0984c0]-(8)-[UILabel:0x7a097f70]>", 
"<NSAutoresizingMaskLayoutConstraint:0x79ec3c60 h=--& v=--& H:[UITableViewCellContentView:0x7a097ed0(0)]>" 

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x7a098570 H:[UIImageView:0x7a0984c0(60)]> 

從哪個是最混亂的位線:

H:[UITableViewCellContentView:0x7a097ed0(0)]

它出現的單元格的contentview有一個零寬度?!?

由於此自動佈局打破了圖像寬度約束(寬度60)。錯誤不斷突破每一個違背零寬度contentview的約束。一旦錯誤輸出完成後,單元顯示正確。

細胞是由一個imageview的三個uilabels的:

Cell design

我不明白爲什麼會內容查看具有零寬度或爲什麼會發生這些約束錯誤。在iOS 7.1上的模擬器或設備上運行時會出現錯誤,在iOS 8上的模擬器或設備上運行時不會發生錯誤!

有沒有人有線索爲什麼會發生這種情況?

回答

0

我找到了答案。

我已經在iOS7中啓動了該項目,然後在iOS 8出來時升級了xcode。升級後創建的表視圖是展現此行爲的視圖。

我發現,在表視圖控制器的方法的cellForRowAtIndexPath如果我把這個代碼出隊的細胞後:

cell.contentView.frame = cell.bounds; 
cell.contentView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 

它固定的問題。