一、自动布局推出时间
1,2007.1.9 iPhone ~ 2011.10.4 iPhone 4s时期,只有一种屏幕不需要自动布局技术。
2,2010.1.27 iPad ,iPad出现以后需要进行横竖屏切换,这时候出现AutoResizing。
3,2012.9 iPhone 5。iOS6发布同时发布iPhone5,推出 AutoLayout 技术。
4,2014.9.10 iPhone 6。iOS8发布同时发布iPhone6,推出了 AutoLayout + SizeClasses 技术。
5,2015.9.10 iOS9。iOS9在 AutoLayout + SizeClasses 基础上,又添加了新的一个UI控件 — UIStackView。
/*
1. 为什么要使用自动布局技术:
- 不适用自动布局技术,我们搭建的UI界面只能在一种尺寸的屏幕下‘完美’运行,换一个尺寸的屏幕就‘不完美’了
2. 有哪些自动布局的技术?
- AutoResizing 、 AutoLayout
3. 自动布局技术的发展史:
- 早期iPhone3GS \ iPhone4 \ iPhone4S 屏幕的物理尺寸是一样的(3.5inch),应用程序没有横竖屏切换的要求,所以无需屏幕适配。只需要设置 Frame 就可以了。
- 后来出了iPad,苹果要求在 iPad 上运行的程序如果没有特殊原因,应该支持横竖屏切换。Frame + AutoResizing 技术应运而生。
AutoResizing 技术的核心就是:参考父试图进行布局的约束设置
- iOS6发布同时发布iPhone5,不同屏幕尺寸就出现了(4.0inch),所以苹果就适时推出 AutoLayout 技术。
AutoLayout 技术的核心就是:不仅能够参考父试图还可以参考任意视图进行布局约束设置。和 AutoResizing 比起来,AutoLayout 功能更加强大,不像 AutoResizing 那样只能约束和父试图之间的位置关系
但是!由于 4.0 和 3.5 两种屏幕尺寸虽然发生变化,可屏幕的宽度并没有发生变化,所以当时应用并不广泛。
- iOS8发布同时发布iPhone6,这一次屏幕尺寸的宽和高都发生了变化,所以就需要一种功能强大的自动布局技术,苹果适时推出了 AutoLayout + SizeClasses 技术,自此 AutoLayout 技术的使用大范围铺开
- iOS9在 AutoLayout + SizeClasses 基础上,又添加了新的一个UI控件 -- UIStackView。这个控件是帮助我们进行自动布局的控件
重点学习 AutoLayout 技术,学不好 AutoLayout ,学SizeClass 和 UIStackView 是徒劳的
AutoResizing 现在已经应用不多了,它可以完全被AutoLayout所取代。
*/
二、什么时候使用自动布局?
1. 支持不同尺寸的屏幕;
2. 支持横竖屏切换的时候;
3. iPad 在分屏的时候;
4. iMac 程序在调整窗口大小的时候。
三、在IB(Interface Builder)中使用AutoResizing
1. 禁用AutoLayout:只有禁用AutoLayout,AutoResizing的配置面板才能出现,所以在一个IB中只能使用一种自动布局技术。
特点1:AutoResizing只能定义视图和父试图之间的位置关系。
特点2:外面四根线,勾选:边距不可变;不勾选:边距可变。
特点3:里面两根线,勾选:宽、高可变;不勾选:宽、高不可变。
四、代码中使用AutoResizing
使用autoresizingMask属性来设置四周边距和宽高是否可变。例如:
// 设置AutoResizing
redView.autoresizingMask = UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleWidth;
寻找 可变的属性,通过位枚举做位运算。
typedef NS_OPTIONS(NSUInteger, UIViewAutoresizing) {
UIViewAutoresizingNone = 0,
UIViewAutoresizingFlexibleLeftMargin = 1 << 0, //左边距可变
UIViewAutoresizingFlexibleWidth = 1 << 1, //宽可变
UIViewAutoresizingFlexibleRightMargin = 1 << 2, //右边距可变
UIViewAutoresizingFlexibleTopMargin = 1 << 3, //上边距可变
UIViewAutoresizingFlexibleHeight = 1 << 4, //高可变
UIViewAutoresizingFlexibleBottomMargin = 1 << 5 //下边距可变
};