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

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

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

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

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

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

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

樣例:

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