iPhone4之前
- 没有适配,不用适配
- 经常会出现坐标值写死的代码
//#define ScreenW 320
//#define ScreenH 480
#define ScreenW [UIScreen mainScreen].bounds.size.width
#define ScreenH [UIScreen mainScreen].bounds.size.height
// 创建一个显示在屏幕右下角的按钮
CGFloat buttonW = 100;
CGFloat buttonH = 50;
button.frame = CGRectMake(ScreenW - buttonW, ScreenH - buttonH, buttonW, buttonH);
iPad出现以后
- 需要横竖屏适配
- 出现了一种方便的屏幕适配技术:Autoresizing
- 局限性:仅仅能解决子控件和父控件之间的相对关系问题
使用Autoresizing:
- UIViewAutoresizingFlexible
Left
Margin = 1 << 0,- 距离父控件
左边
的间距是伸缩的
- 距离父控件
- UIViewAutoresizingFlexible
Right
Margin = 1 << 2,- 距离父控件
右边
的间距是伸缩的
- 距离父控件
- UIViewAutoresizingFlexible
Top
Margin = 1 << 3,- 距离父控件
上边
的间距是伸缩的
- 距离父控件
- UIViewAutoresizingFlexible
Bottom
Margin = 1 << 5- 距离父控件
下边
的间距是伸缩的
- 距离父控件
- UIViewAutoresizingFlexible
Width
= 1 << 1,-
宽度
跟随父控件宽度
进行伸缩
-
- UIViewAutoresizingFlexible
Height
= 1 << 4,-
高度
跟随父控件高度
进行伸缩
-
iOS6开始(Xcode4开始)
- 出现了一种新的屏幕适配技术:Autolayout
- 解决任何控件之间的相对关系问题
iOS8开始(Xcode6开始)
- 出现了一种新的屏幕适配技术:Sizeclass
Autolayout的2个核心概念
-
约束
- 尺寸约束
- width约束
- height约束
- 位置约束
- 间距约束(上下左右间距)
- 尺寸约束
-
参照
- 所添加的约束跟哪个控件有关(相对于哪个控件来说)
常见单词
- Leading -> Left -> 左边
- Trailing -> Right -> 右边
UILabel实现包裹内容
- 设置宽度约束为 <= 固定值
- 设置位置约束
- 不用去设置高度约束
使用Monsonry框架注意点:
make: 添加约束
remake:删除以前的约束,添加新的约束
updata: 修改某个已有的约束
小案例:
让两个view之间间距和它们距离父view间距一样。
可以使用以下技巧:添加三个看不见的view进去