關於AutoLayout的介紹可參考:
使用解讀:
http://www.javashuo.com/article/p-vmnksbpj-hk.htmlhtml
iOS 屏幕適配,autoResizing autoLayout和sizeClass圖文詳解
http://www.cnblogs.com/cxbblog/p/4166876.htmlios
AutoLayout使用注意點參考:
https://github.com/smileyborg/UIView-AutoLayout/wiki/Tips-and-Tricksgit
AutoLayout實現UITableView的Cell動態佈局及動態行高必看手冊
Using Auto Layout in UITableView for dynamic cell layouts & variable row heights
http://stackoverflow.com/questions/18746929/using-auto-layout-in-uitableview-for-dynamic-cell-layouts-variable-row-heights
http://codingobjc.com/blog/2014/10/15/shi-yong-autolayoutshi-xian-uitableviewde-celldong-tai-bu-ju-he-ke-bian-xing-gao/index.html (中文翻譯)github
AutoLayout啓用時,約束與手動設置frame方式衝突,不能混合使用,須要更改佈局時應該考慮動態修改約束變量,而後觸發強制刷新layout
經過約束條件,AutoLayout使用自動佈局引擎Cassowary動態計算、維護各個view所需的frame
但bounds屬性依然能夠手動更改操做
frame表示view自己相對父容器的位置、大小信息
bounds表示view的內容相對view的實際繪製座標位置,通常爲(0, 0)
bounds的尺寸與frame尺寸不必定相等(內容與view尺寸不必定相等)segmentfault
關於bounds的解釋與使用可參考:
如何對使用了autolayout的UIView添加動畫
http://www.cocoachina.com/ios/20141010/9869.html數組
頻繁的刪除、添加約束會致使嚴重的性能問題
相對於刪除再添加新約束,蘋果推薦經過修改已有約束的方式實現更新
擁有最高優先級(1000-required)的約束不容許發生衝突,此外的約束不強制必須知足,所以可存在競爭性衝突設置wordpress
view.constraints數組包含layout子view所需的全部約束
可經過constraint的firstItem、firstAttribute、secondItem、secondAttribute、constant等屬性篩選出須要修改的約束
也可將約束綁定到outlet對象進行修改
約束中只有constant屬性容許實時修改佈局
約束脩改完畢後,可調用重layout等方式刷新界面佈局性能
操做方法可參考:
Auto growing UITextView Using Auto Layout
https://corecocoa.wordpress.com/2013/11/09/auto-growing-uitextview-using-auto-layout/動畫
具有內容動態高度的組件可不設置高度約束(運行時會被隱式指定並實時更改)
當XIB的組件缺乏最低必要約束條件時(例如View高度),編譯時IB系統會自動生成插入一個默認的約束條件用以補全全部約束,每一個界面最終必須使用靜態絕對佈局來定位,部分尺寸可變組件須要動態相對佈局時,在運行時經過組件內部代碼或手工代碼進行約束值的動態更改、從新layout。
當不但願系統自動追加約束條件時,可在XIB中設定一個臨時約束,指定Remove at build time,則在編譯期間對該約束進行忽略,並再也不追加缺乏的約束,此時須要在代碼中手動添加所缺的約束條件。
同一組件中存在重複類型(而且優先級相同??)的約束時將拋出異常(除非標記爲deactivate)。
關於Remove at build time以及Uninstalled constraint與Placeholder constraint的區別,可參考:
http://stackoverflow.com/questions/19015215/trouble-with-autolayout-on-uitableviewcell