學習 iOS Autolayout的一點經驗

隨着IOS系統的不斷推新,IOS開發的方式也將發生不少變化,就以IOS開發中的Autolayout來說,AutoLayout在IOS6就已經出來了,但到到目前爲止,IOS8已經出來小半年了,在開發中AutoLayout還是沒有被徹底使用,而apple公司卻一直在催出我們使用,可見在以後的開發中,AutoLayout的地位會越來越重要。

以下是最近在學習Autolayout的過程中學到的一些東西,全出於自己的理解,不對的地方望大家指出。

一、一個視圖所需約束的多少

      1.普通的UI視圖(UIView)

對於普通的視圖UIview來說,想要正確完成視圖的佈局,就得創建足夠的約束,普通視圖無法計算自身的寬高,所以在創建約束時,要麼添加關於視圖寬高的約束,要麼添加足夠的其他約束,保證這些視圖可以計算出自身的寬高。

  2.可以計算自身寬高的視圖(UILable、UIbutton)

對於這些視圖來說,因爲可以計算出自身的寬高了,所以沒有特殊需求的話,佈局視圖時添加除寬高的約束就可以了。

3.特殊的UIScrollView

在AutoLayout中,UIsrollView是比較複雜的,因爲UIscrollView的實際可滾動視圖大小是由它的ContentSize決定的,所以單獨一個ScrollView是沒法實現佈局的,它必須依賴於自身的子視圖來設定自己的ContentSize。

二、約束的添加規則

1.


2.

     

3.





三、約束的更新

在實際使用的過程中,發現對於UI的可變動性要求是很高的,所以在使用AutoLayout實現佈局後,想更新視圖的話我們必須的更新約束,到這問題就來了,對於視圖的某個屬性的約束正常只可以添加一個(當然不同優先級的是可以添加多個的),在添加完視圖後再重新添加針對同一個視圖屬性的約束就會報錯(storyboard中也一樣),所以剛開始學AutoLayout時實現約束更新時比較困難的。

針對這個實際的問題,暫時想到以下兩種方法:

1.使用變量綁定約束

實質就是創建約束時用一個變量綁定一個屬性的約束,然後通過改變變量的值來更新約束即可。

2.移除子視圖

當一個視圖從父視圖上移除時,對於這個子視圖來說,它所用的約束將會被移除掉,這時候你再重新添加子視圖到父視圖,並重新添加約束即可。


對比上面兩種方法,第二種方法雖然能實現,但是稍顯複雜,建議使用第一中。



最後,在開發中用代碼實現AutoLayout是比較複雜的,雖然apple提供了VFL來添加自動佈局,但還是有點複雜,在此推薦用的比較多的第三方庫,它對AutoLayout進行了block回調式的封裝,使用比較方便,鏈接:masonry.




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章