適配總結(jié):
01.概念
系統(tǒng)適配:有時(shí)候iOS9新的方法跑到iOS8上面會(huì)報(bào)錯(cuò),找不到該方法蹬癌。
屏幕適配:蘋果手機(jī)各種屏幕都有权她,所以就需要做屏幕適配了
設(shè)備的分辨率:iPhone上屏幕都是由點(diǎn)組成的
02.屏幕適配的發(fā)展歷史
Autoresizing 幾乎不用寫什么代碼就可以自動(dòng)拉伸控件的尺寸,但是有弊端他只能相對(duì)父控件布局逝薪,而不能相對(duì)同級(jí)(兄弟控件)進(jìn)行布局
Autolayout 從iphone6發(fā)布后就火起來(lái)了
sizeClass
03.Autolayout總結(jié):
約束:通過(guò)約束確定一個(gè)控件的位置和尺寸
參照:所添加的約束是跟哪個(gè)控件有關(guān)(相對(duì)哪個(gè)控件來(lái)說(shuō))
蘋果官方也推薦開發(fā)者盡量使用Autolayout來(lái)布局UI界面伴奥,autolayout能很輕松地解決屏幕適配的問(wèn)題。
代碼實(shí)現(xiàn)Autolayout的步驟
p利用NSLayoutConstraint類創(chuàng)建具體的約束對(duì)象
p添加約束對(duì)象到相應(yīng)的view上
(void)addConstraint:(NSLayoutConstraint*)constraint;
(void)addConstraints:(NSArray *)constraints;
l代碼實(shí)現(xiàn)Autolayout的注意點(diǎn)
p要先禁止autoresizing功能翼闽,設(shè)置view的下面屬性為NO
view.translatesAutoresizingMaskIntoConstraints = NO;
p添加約束之前拾徙,一定要保證相關(guān)控件都已經(jīng)在各自的父控件上
p不用再給view設(shè)置frame
l 一個(gè)NSLayoutConstraint對(duì)象就代表一個(gè)約束
自動(dòng)布局的核心計(jì)算公式:
obj1.property1 =(obj2.property2 * multiplier)+ constant value
04.添加約束的規(guī)則:
在創(chuàng)建約束之后,需要將其添加到作用的view上
在添加時(shí)需要注意目標(biāo)view遵循的規(guī)則:
(1) 對(duì)于兩個(gè)同層級(jí)view直接的約束關(guān)系感局,添加到他們的父view上
(2) 對(duì)于兩個(gè)不同層次view之間的約束關(guān)系尼啡,添加到他們最近的共同父view上
(3)對(duì)于有層次關(guān)系的兩個(gè)view之間的約束關(guān)系暂衡,添加到層次較高的父view上
05.VFL語(yǔ)言
pVFL全稱是Visual Format Language,翻譯過(guò)來(lái)是“可視化格式語(yǔ)言”
06.有了Autolayout的UILabel
在沒(méi)有Autolayout之前崖瞭,UILabel的文字內(nèi)容總是居中顯示狂巢,導(dǎo)致頂部和底部會(huì)有一大片空缺區(qū)域有了autolayout之后书聚,UILabel的bounds默認(rèn)會(huì)自動(dòng)包住所有的文字內(nèi)容唧领,和底部不再會(huì)有空缺的區(qū)域。
l在修改了約束之后雌续,只要執(zhí)行下面代碼斩个,就能做動(dòng)畫效果
[UIView animateWithDuration:1.0 animations:^{
[添加了約束的view的父控件 layoutIfNeeded];
}];
07.Masonry
目前最流行的Autolayout第三方框架
用優(yōu)雅的代碼方式編寫Autolayout
省去了蘋果官方惡心的Autolayout代碼
大大提高了開發(fā)效率
mas_equalTo和equalTo
默認(rèn)情況下:
mas_equalTo有自動(dòng)包裝功能,比如自動(dòng)將20包裝為@20
equalTo沒(méi)有自動(dòng)包裝功能
l如果添加了下面的宏驯杜,那么mas_equalTo和equalTo就沒(méi)有區(qū)別
define MAS_SHORTHAND_GLOBALS
// 注意:這個(gè)宏一定要添加到#import "Masonry.h"前面
mas_width和width
默認(rèn)情況下
u width是make對(duì)象的一個(gè)屬性受啥,用來(lái)添加寬度約束用的,表示對(duì)寬度進(jìn)行約束
u mas_width是一個(gè)屬性值鸽心,用來(lái)當(dāng)做equalTo的參數(shù)滚局,表示某個(gè)控件的寬度屬性
l如果添加了下面的宏,mas_width也可以寫成width
define MAS_SHORTHAND
lmas_height顽频、mas_centerX以此類推