自動(dòng)布局
現(xiàn)在項(xiàng)目使用自動(dòng)布局的非常多,我說(shuō)的是純代碼,不包括 xib 和storeyboard, 因?yàn)檫@兩個(gè)我用的不多.
有一些第三方的框架,對(duì)自動(dòng)布局支持的很好,但是也會(huì)有一些問(wèn)題,比如布局優(yōu)先級(jí)問(wèn)題,比如:
很簡(jiǎn)單的一個(gè)頁(yè)面,但是這里是有問(wèn)題的,
文字?jǐn)?shù)和類型的長(zhǎng)度是不固定,我們不能直接設(shè)置它的寬度,在自動(dòng)布局的時(shí)候,
給他設(shè)置的約束是:右邊距離屏幕20px,y 方向和作者名對(duì)齊,寬度沒有設(shè)置.
作者名稱也是不確定的,因此也不能設(shè)置寬度,可能你會(huì)說(shuō)可以計(jì)算出來(lái),然后設(shè)置約束,當(dāng)然這是一個(gè)解決方案,但是不夠簡(jiǎn)單,既然有了自動(dòng)布局,優(yōu)先考慮的還是從自動(dòng)布局方面考慮
而作者的約束: 左邊的約束好說(shuō) 右邊不好確定,寬度不好確定.
這種情況下,會(huì)出現(xiàn)第一個(gè)行那種問(wèn)題,由于作者名稱太長(zhǎng),積壓了文字?jǐn)?shù)和類型,顯示不完全,出現(xiàn)了問(wèn)題,不用想 一定是約束有問(wèn)題,其實(shí)就是作者和類型都沒辦法確定寬度 都沒有設(shè)置完全約束,但是這時(shí)候默認(rèn)顯示完全了作者名的約束,我們可以設(shè)定優(yōu)先顯示完全文字和類型,這兩個(gè)的優(yōu)先級(jí)更高,就能解決這個(gè)問(wèn)題.
設(shè)置優(yōu)先級(jí)方法:
- (void)setContentCompressionResistancePriority:(UILayoutPriority)priority forAxis:(UILayoutConstraintAxis)axis NS_AVAILABLE_IOS(6_0);
第一個(gè)參數(shù)(priority):通俗來(lái)講,不同的優(yōu)先級(jí)妇穴,表示顯示的完整性的高低,優(yōu)先級(jí)越高神郊,那么在父控件無(wú)法在無(wú)越界的情況下的情況下迅办,就會(huì)優(yōu)先先把優(yōu)先級(jí)高的控件顯示完整宅静,然后再依次顯示優(yōu)先級(jí)低的
第二個(gè)參數(shù)(axis):代表在什么方向上進(jìn)行優(yōu)先級(jí)限制
項(xiàng)目中代碼設(shè)置:
這樣設(shè)置完之后:
字?jǐn)?shù)和類型的優(yōu)先級(jí)別比作者名更高 因此字?jǐn)?shù)和后面的類型可以完整的顯示,而作者名就根據(jù)之前設(shè)置的約束壓縮顯示了.