UITableViewCell 自動(dòng)計(jì)算高度下autolayout 約束沖突問(wèn)題

前言:
當(dāng)cell內(nèi)容是不固定時(shí),我們可以通過(guò)autolayout 來(lái)完成自動(dòng)高度計(jì)算,而不必手動(dòng)計(jì)算。
但這里往往會(huì)遇到一個(gè)問(wèn)題:
? ? 第一次完成cell布局后,當(dāng)填充cell的數(shù)據(jù)發(fā)生變化,我們手動(dòng)更新約束時(shí),比如使用masonry的mas_makeConstraints更新時(shí),可能會(huì)在控制臺(tái)看到以下約束沖突警告

[LayoutConstraints] Unable to simultaneously satisfy constraints.
    Probably at least one of the constraints in the following list is one you don't want. 
    Try this: 
        (1) look at each constraint and try to figure out which you don't expect; 
        (2) find the code that added the unwanted constraint or constraints and fix it. 

先說(shuō)解決方案:
? ? 如果要去掉以上警告,我們需要調(diào)低下cell中子控件約束的優(yōu)先級(jí),理論上是降低任一子控件的垂直方向上的約束都可以,但通常為了統(tǒng)一,往往是調(diào)整位于cell中最底下的那個(gè)子控件與cell的bottom間的約束優(yōu)先級(jí)參數(shù)。

再說(shuō)為什么需要這么做及為什么能這么做:
? ? 之所以出現(xiàn)沖突警告是因?yàn)閏ell在完成布局后,系統(tǒng)會(huì)自動(dòng)給cell的高度加上一條約束,并且優(yōu)先級(jí)是1000;而當(dāng)數(shù)據(jù)變化導(dǎo)致控件高度發(fā)生改變從而引起cell的底部約束-cell的頂部 ≠系統(tǒng)計(jì)算好的cell高度約束,系統(tǒng)就會(huì)報(bào)出約束沖突。

? ? 但是,雖然報(bào)了約束沖突警告,但我們看到的cell UI顯示卻符合預(yù)期,高度正常更新。這是因?yàn)樵趓unloop在下一輪UI重繪時(shí),Cell又會(huì)重新根據(jù)控件的約束計(jì)算cell高度,然后更新自身高度約束。

因此,解決方案就可以簡(jiǎn)單的調(diào)整優(yōu)先級(jí)來(lái)避免觸發(fā)沖突警告。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容