AutoLayout
适配:
适应、兼容各种不同情况
移动开发中常见种类:
系统适配:针对不同版本的操作系统进行适配
屏幕适配:针对不同大小的屏幕尺寸进行适配
屏幕适配
- 屏幕方向:横屏、竖屏
屏幕适配发展历史
- iPhone3GS\iPhone4
- 没有屏幕适配可言
- 用frame/bounds/center进行布局
- 以前的现象:坐标值、宽度高度值全部写死
UIButton *btn = [[UIButton alloc] init]; btn.frame = CGRectMake(0,0,320 - b,150 - c);
- iPad出现、iPhone横屏
- 出现Autoresizing技术
- 让横竖屏适配相对简单
- 让子控件随父控件的行为自动发生相应变化
- 前提是关闭AutoLayout才可以使用
- 局限性
- 只能解决子控件跟父控件的相对关系问题 - 不能解决兄弟控件的相对关系问题
- 出现Autoresizing技术
redView.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleRightMargin |UIViewAutoresizingFlexibleWidth;
UIViewAutoresizingNone = 0,
UIViewAutoresizingFlexibleWidth = 1 << 1,
UIViewAutoresizingFlexibleHeight = 1 << 4,
UIViewAutoresizingFlexibleLeftMargin = 1 << 0,拉伸,不固定
UIViewAutoresizingFlexibleRightMargin = 1 << 2,
UIViewAutoresizingFlexibleTopMargin = 1 << 3,
UIViewAutoresizingFlexibleBottomMargin = 1 << 5
iOS 6.0(Xcode4)开始
- 出现了Autolayout技术
- 从Xcode5.0(iOS 7.0)开始,开始流行Autolayout
- “自动布局”技术,专门用来布局UI界面的
Autolayout的2个核心概念
- 参照
- 约束
Autolayout的警告和错误
警告
- 控件的frame不匹配所添加的约束
- 比如约束控件的宽度为100, 而控件现在的宽度是110
错误
- 缺乏必要的约束
只约束了宽度和高度, 没有约束具体的位置
两个约束冲突, 比如
- 1个约束控件的宽度为100, 1个约束控件的宽度为110
基于Autolayout的动画
在修改了约束之后,只要执行下面代码,就能做动画效果
[UIView animateWithDuration:1.0 animations:^{
[添加了约束的view layoutIfNeeded];
}];
self.spacingContraint.constant = 50;
self.widthContraint.constant = 100;
self.height.constant = 100;
[UIView animateWithDuration:1.5 animations:^{
[self.heightContraint layoutIfNeeded];
}];
>