屏幕适配
方案0
- 手动代码判断
方案1
- Autoresizing(iPad出现以后)
- 局限性: 仅仅能解决子控件和父控件之间的相对关系问题 仅仅能改变位置尺寸, 但是横竖屏切换时, 不同排列结构无法改变(比如上下排列变成左右排列), 控件状态无法改变
用法 UIView里面有一个属性 autoresizingMask
UIViewAutoresizingFlexibleLeftMargin = 1 << 0, 距离父控件左边的间距是伸缩的 UIViewAutoresizingFlexibleRightMargin = 1 << 2, 距离父控件右边的间距是伸缩的 UIViewAutoresizingFlexibleTopMargin = 1 << 3, 距离父控件上边的间距是伸缩的 UIViewAutoresizingFlexibleBottomMargin = 1 << 5 距离父控件下边的间距是伸缩的 UIViewAutoresizingFlexibleWidth = 1 << 1, 宽度跟随父控件宽度进行伸缩 UIViewAutoresizingFlexibleHeight = 1 << 4, 高度跟随父控件高度进行伸缩
意味着, 所有继承自UIView的子控件, 都可以使用Autoresizing进行布局
方案2
Autolayout(iOS6开始)
优势
解决任何控件之间的相对关系问题
局限性:
仅仅能改变位置尺寸, 但是横竖屏切换时, 不同排列方式无法改变。比如三个控件, 控制水平排放和垂直排放,控件与控件之间的耦合性非常强
方案3
UIStackView(iOS9.0开始)
优势
可以非常快速的进行水平或者垂直布局, 并且可以设置间距。控件之间的耦合性弱
局限性
只能实现一些有规律的布局(水平或者垂直)。目前为止, 9.0版本过高, 我们依然需要适配低版本
方案四
Sizeclass(iOS8开始)
优势
可以解决不同屏幕状态下的排列方式和控件样式问题。主要是因为可以区分不同的屏幕尺寸, 具体布局还要参照上面方案
局限
无法区分iPad的横竖屏