1 理解自身內(nèi)容尺寸約束與抗壓抗拉

自身內(nèi)容尺寸約束:一般來說,要確定一個視圖的精確位置,至少需要4個布局約束(以確定水平位置x、垂直位置y、寬度w和高度h)。但是,某些用來展現(xiàn)內(nèi)容的用戶控件,例如文本控件UILabel、按鈕UIButton、圖片視圖UIImageView等,它們具有自身內(nèi)容尺寸(Intrinsic Content Size),此類用戶控件會根據(jù)自身內(nèi)容尺寸添加布局約束。也就是說,如果開發(fā)者沒有顯式給出其寬度或者高度約束,則其自動添加的自身內(nèi)容約束將會起作用。因此看似“缺失”約束,實際上并非如此。

關(guān)于自身內(nèi)容尺寸約束,簡單來說就是某些用來展現(xiàn)內(nèi)容的用戶控件,它們會根據(jù)自身內(nèi)容尺寸添加布局約束。

自身內(nèi)容尺寸約束的抗擠壓與抗拉抻效果。彈簧會有自身固有長度,當(dāng)有外力作用時,彈簧會抵抗外力作用,盡量接近固有長度。

抗拉抻:當(dāng)外力拉長彈簧時,彈簧長度大于固有長度,且產(chǎn)生向內(nèi)收的力阻止外力拉抻,且盡量維持長度接近自身固有長度。

抗擠壓:當(dāng)外力擠壓彈簧時,彈簧長度小于固有長度,且產(chǎn)生向外頂?shù)牧ψ柚雇饬D壓,且盡量維持長度接近自身固有長度。

關(guān)于抗壓抗拉,就是布局沖突需要犧牲某些控件的某些寬度或者高度約束時,抗壓高的控件越不容易被壓縮,抗拉高的控件越不容易被拉升。即自身布局對抗外界布局的能力。

樣例:

一種常見的業(yè)務(wù)場景是用戶修改地址,在輸入新地址之前先讀取用戶之前的地址作為填充。UI實現(xiàn)是水平平