為什麼會出現autoresizingmask和autolayout?
1. 適配:適應、相容各種不同的情況
系統適配:新的方法、舊的方法廢棄
螢幕適配:針對不同大小螢幕尺寸進行適配
1> 點、畫素的關係
在使用者眼中
螢幕是由無數個畫素組成的
畫素越多,螢幕越清晰
在開發者眼中
螢幕是由無數個點組成的,點又是由畫素組成的
畫素越多,螢幕越清晰
2> 在以前的ios程式中,是如何布局ui介面的?
寫固定值-> autoresizingmask -> autolayout-> sizeclasses
iphone1-iphone4s時代 螢幕的尺寸固定為(320,480) ,我們只需要簡單計算一下相對位置就好了
iphone5-iphone5s時代螢幕的尺寸變了(320,568) 這時autoresizingmask派上了用場
iphone6時代(ios8) 螢幕的寬度也發生了變化,終於是時候拋棄autoresizingmask改用autolayout了,原因如下:
(1)不用支援ios5了
(2)相對於螢幕適配的多樣性來說autoresizingmask也已經過時了,直到iphone6發布之後autolayout勢在必行了
2.autoresizingmask(簡單了解)
autolayout不相容
3.autolayout
1> 認識autolayout:
(1) autolayout是一種「自動布局」技術,專門用來布局ui介面的
(2) autolayout自ios 6開始引入,由於xcode 4的不給力,當時並沒有得到很大推廣~
(3) 自ios 7(xcode 5)開始,autolayout的開發效率得到很大的提公升
(4) 蘋果官方也推薦開發者盡量使用autolayout來布局ui介面
(5) autolayout能很輕鬆地解決螢幕適配的問題
2> **實現autolayout的步驟
1.利用nslayoutconstraint類建立具體的約束物件,新增約束物件到相應的view上,乙個nslayoutconstraint物件就代表乙個約束
遵循公式:item1.attribute1 = multiplier × item2.attribute2 + constant
建立約束物件的常用方法
+(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 :常量
2.新增約束到對應的父檢視上
- (void)addconstraint:(nslayoutconstraint *)constraint;
- (void)addconstraints:(nsarray *)constraints;
**實現autolayout的注意點
(1) 要先禁止autoresizing功能,設定view的下面屬性為no
view.translatesautoresizingmaskintoconstraints = no;
(2) 新增約束之前,一定要保證相關控制項都已經在各自的父控制項上,不用再給view設定frame
(3) 在autolayout中有這樣的規定,對於兩個同層級view之間的約束關係,新增到它們的父view上;對於兩個不同層級view之間的約束關係,新增到他們最近的共同父view上;對於有層次關係的兩個view之間的約束關係,新增到層次較高的父view上
3.基於autolayout的動畫
在修改了約束之後,只要執行下面**,就能做動畫效果
[uiview animatewithduration:1.0 animations:^];
3> vfl(visual format language:視覺化格式語言)
(1) vfl是蘋果公司為了簡化autolayout的編碼而推出的抽象語言
(2) 示例:"h:[view1(72)]-12-[view2(50)]" -> view1寬72,view2寬50,它們之間間距12
(3) **實現:
使用vfl來建立約束陣列
+ (nsarray *)constraintswithvisualformat:(nsstring *)format options:(nslayoutformatoptions)opts metrics:(nsdictionary *)metrics views:(nsdictionary *)views;
format :vfl語句
opts :約束型別
metrics :vfl語句中用到的具體數值
views :vfl語句中用到的控制項
Auto Layout 入門及使用
引言 auto layout是ios6發布後引入的乙個全新的布局特性,其目的是彌補以往autoresizing在布局方面的不足之處,以及未來應對更多尺寸適配介面時布局可以更好的展示.要完全掌握auto layout 以下簡稱al 不是一件容易的事情,實踐是學習和掌握的根本,並且在根本上面,理解其如何...
MySQL Explain的使用及各引數介紹
select type,查詢的型別 table,輸出 查詢 表的名稱 type,訪問方式 possible keys,可能使用的key 顯示可能使用的索引,沒有則為null,有的話可能是多個,但是不一定全部使用 key,實際使用的索引 key len,表示索引中所使用的位元組數,可通過該列計算查詢中...
AutoLayout的各種使用方法
關於autolayout 下面通過乙個簡單的列子分別演示autolayout的各種使用方法 需求是在控制器view底部新增2個view,1個藍色,1個紅色2個view寬度 高度永遠相等距離父控制項左邊 右邊 下邊間距和2個view之間的間距相等,效果如下圖 橫屏效果 橫屏效果 豎屏效果 豎屏效果 在...