自動布局:autolayout
簡介:在以前的ios程式中,是如何設定布局ui介面的?
經常編寫大量的座標計算**
為了保證在3.5 inch和4.0 inch螢幕上都能有完美的ui介面效果,有時還需要分別為2種螢幕編寫不同的座標計算**(即傳說中的「螢幕適配」)
什麼是autolayout?
autolayout是一種「自動布局」技術,專門用來布局ui介面的
autolayout自ios 6開始引入,由於xcode 4的不給力,當時並沒有得到很大推廣
自ios 7(xcode 5)開始,autolayout的開發效率得到很大的提公升
蘋果官方也推薦開發者盡量使用autolayout來布局ui介面
autolayout能很輕鬆地解決螢幕適配的問題
autoresizing
在autolayout之前,有autoresizing可以作螢幕適配,但侷限性較大,有些任務根本無法完成,只能決定子檢視和父檢視的螢幕適配。
相比之下,autolayout的功能比autoresizing強大很多
autolayout的2個核心概念:
參照、約束
autolayout的警告和錯誤:
警告控制項的frame不匹配所新增的約束, 比如
比如約束控制項的寬度為100, 而控制項現在的寬度是110
錯誤缺乏必要的約束, 比如
只約束了寬度和高度, 沒有約束具體的位置
兩個約束衝突, 比如
1個約束控制項的寬度為100, 1個約束控制項的寬度為110
**實現autolayout:
**實現autolayout的步驟
利用nslayoutconstraint類建立具體的約束物件
新增約束物件到相應的view上
- (void)addconstraint:(nslayoutconstraint *)constraint;
- (void)addconstraints:(nsarray *)constraints;
**實現autolayout的注意點
要先禁止autoresizing功能,設定view的下面屬性為no
view.translatesautoresizingmaskintoconstraints = no;
新增約束之前,一定要保證相關控制項都已經在各自的父控制項上
不用再給view設定frame
nslayoutconstraint:約束類
乙個nslayoutconstraint物件就代表乙個約束
建立約束物件的常用方法
+(id)constraintwithitem:(id)view1 attribute:(nslayoutattribute)attr1 relatedby:(nslayoutrelation)relation toitem:(id)view2 attribute:(nslayoutattribute)attr2 multiplier:(cgfloat)multiplier constant:(cgfloat)c;
view1 :要約束的控制項
attr1 :約束的型別(做怎樣的約束)
relation :與參照控制項之間的關係
view2 :參照的控制項
attr2 :約束的型別(做怎樣的約束)
multiplier :乘數
c :常量
自動布局有個核心公式
obj1.property1 =(obj2.property2 * multiplier)+ constant value
obj1、obj2:要約束的檢視控制項
property1、property2:約束的型別
multiplier:乘數,一般為1.0
constant value:常量
約束規則:
新增約束的規則(1)
在建立約束之後,需要將其新增到作用的view上
在新增時要注意目標view需要遵循以下規則:
1)對於兩個同層級
view之間的約束關係,新增到它們的父view上
新增約束的規則(2)
2)對於兩個不同層級view之間的約束關係,新增到他們最近的共同父view上
新增約束的規則(3)
3)對於有層次關係的兩個view之間的約束關係,新增到層次較高的父view上
IOS自動布局
使用相對布局之後,可以增加開發的速度,一直用frame的方式,混亂。使用相對布局之後,之前以設定frame的方式來取設定view將沒有效果 除了controller的view 同設定frame類似的時,在設定view的約束的時候,也需要制定他的大小和座標,否則,編輯器會提示警告。以實際操作來演示下如...
ios 自動布局小結
ios6 引入了自動布局。雖然專案中所用不多。但是還是 早點資料看看 做個總結。隨著蘋果解析度越來越多。類似自動布局肯定是越發重要了。在ios 之前 有 autosizing 就是 在父view 跟子view 引入了 spring 和 strut 的概念。乙個是彈簧?意思應該是保證距離不會大於某乙個...
IOS 自動布局 (上)
最早接觸xcode是4.0 那時候auto layout真不成熟,一直用純 自己寫,從最cgrectgetmaxy,cgrectgetmaxx到現在的第三方,最近時間比較多了,參考了網上列子,研究下了 auto layout 和size classes.auto layout 我覺得使用 auto ...