我用 ios masonry 進行對我的tableViewCell進行布局,發生了布局衝突?

因為我的布局的最後一個label已經設置了上下左右的約束,但是恰恰是這個導致日誌列印出這個

label發生了約束衝突,另外我的cell中有圖片設置了大小,實在不清楚哪裡出了問題,如有解答,不勝感激!


看代碼裡面不僅用到了masonry約束,還摻雜了系統約束。估計這個label是在xib創建好的,又用masonry修改。如果你在xib創建的對象,又在代碼用masonry,很容易出現問題。因為masonry不能消除系統約束,而導致約束衝突。(masonry實際將自己創建的約束緩存起來,不是它創建的一概不管)如果你xib創建的控制項沒有設定約束, xib也很默認賦予約束。解決的辦法:

1、不用masonry,直接代碼修改既存的約束。

2、用代碼創建乾淨的label,用masonry修改

3、代碼清除掉label的所有約束,然後masonry修改。

------------------------

sorry,沒注意看。那個系統約束是contentView的。

看提示應該是兩個label的約束髮生衝突,這個衝突可以按照如下方式定位:

1、把所有label的內存地址列印出來

2、當出錯時對照錯誤提示的內存地址定位出兩個出錯的label。帶入值計算一下,一般是約束方程配平不了。

另外,answerPersonlabel和timelable的約束有點問題。雖然label可以一定程度自適應尺寸,但是如果兩個都沒有約束寬和高的label直接建立相對約束,系統會發生困惑,到底是拉伸那個還是壓縮那個。需要指定約束的壓縮和拉伸的優先順序才行。所以看看是不是這兩個label導致的問題。如果是把優先順序也寫入應該可以解決這個問題。


最後一個Label,去掉bottom和conentView的約束,否則會撐開


其實本身這個框架里就會有一下問題 比如兩個控制項的大小關係是不能用乘法的 而且在更新約束的時候也會出現一些bug 個人建議還是在storyboard中圖形化的添加約束吧 雖然比較麻煩可是控制項之間的關係還是比較明晰的 可以用這個框架里的更新約束的updateConstraints的block方法試一下 四條約束固定一個控制項 可能會是少添加了某一條約束


推薦閱讀:

TAG:iOS | iOS開發 | Xcode | iOS工程師 | iOS開發者 |