本文共 3315 字,大约阅读时间需要 11 分钟。
使用 Autoresizing 进行屏幕适配随着 iPad 的发布, 屏幕的物理尺寸发生了变化并且苹果建议,在 iPad 上运行的程序如果没有特殊原因,应该支持横竖屏切换因此:不能把控件的 frame 都写死了,需要进行屏幕适配为了解决屏幕适配需求,苹果同时推出了第一个屏幕适配解决方案:AutoresizingAutoresizing 的核心思想就是:参照父容器来设置子控件的 frame不再写死 frame, 而是参照父容器举例:在竖屏下有一个按钮要占据整个屏幕宽度, 当切换到横屏以后同样要占据整个屏幕的宽度Autoresizing 只能设置当前控件与父控件之间的相对关系
iOS 6 —— Auto Layout(自动布局)随着 iPhone5 \ iPhone5s 等的发布苹果设备不同尺寸的屏幕变得越来越多, 不仅要求能根据控件父子关系来设置相对位置,也要求能根据任意控件之间的关系来设置位置因为 Autoresizing 只能设置当前控件与父控件之间的相对关系,当遇到要设置兄弟控件之间的关系的时候 Autoresizing 就无能为力了举例: 在竖屏下, 屏幕底部有两个按钮,这两个按钮的间距为一个固定的值(宽度不指定)当切换为横屏的时候要求这两个按钮还显示在屏幕底部并且按钮间的间距不变, 按钮可以随之变宽Auto Layout 技术主要解决的问题:控件位置的参照关系不再局限于父控件
iOS 8 —— Size Classes + Auto Layout使用 Size Classes + Auto Layout 进行屏幕适配当 iPhone6 发布以后,苹果设备的屏幕越来越多(以后也可能出现更多不同大小的屏幕),为了能更容易的适配不同的屏幕,苹果推出了 Size Classes 技术通过 Auto Layout 设置的约束,约束一旦添加就会应用于各种屏幕(也就是说在各种不同的屏幕下都使用相同的约束)通过 Size Classes + Auto Layout 的方式, 可以为不同尺寸的屏幕设置不同的约束 举例: iPhone 下的计算器,在横屏、竖屏下的不同表现Size Classes 技术主要解决的问题:"主要解决了iPhone横竖屏适配及iPhone和iPad开发时共用一个SB的问题"
iOS 9 —— Size Classes + Auto Layout + StackViewStackView 的核心便是方便垂直或水平排布多个 subview类似于 android 的 LinearLayoutStackView 最有用的就是它会自动为每个 subview 创建和添加 Auto Layout 约束,程序员可以通过选项配置subview的大小、排布以及彼此间的间距使用 stackview 主要简化在线性方向上,重复设置控件布局约束的问题
四周的线选上固定反之不固定
内部两根线选上宽高不固定反之固定
* AutoLayout核心公式: *
* firstItem.firstAttribute {==,<=,>=} secondItem.secondAttribute * multiplier + constant *
注意:如果firstItem.firstAttribute和secondItem.secondAttribute调换位置后注意multiplier和constant值的变化
例:redW = 300 blueW = 200300 == 200 * 2 + -100200 == 300 * 0.5 + 50;
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *myViewTop;self.myViewTop.constant += 400;
1.要先禁止Autoresizing功能,设置view的下面属性为NO约束要作用的view.translatesAutoresizingMaskIntoConstraints = NO;2.添加约束之前,一定要保证相关控件都已经在各自的父控件上3.不用再给控件设置frame
1.如果添加的约束和其它控件没有关系, 要添加到自己身上"也可以添加在父控件上"2.如果是父子关系, 设置子控件的约束, 约束要添加到父控件上3.如果是兄弟关系, 设置两兄弟的约束, 约束要添加到它们最近的共同父控件上
Xcode版本 | 正式版发布时间 | 支持系统及设置 |
---|---|---|
Xcode4.2 | 2011年10月13日 | iOS5-iPhone4s |
Xcode4.5 | 2012年9月20日 | iOS6-iPhone5 |
Xcode5.0 | 2013年9月18日 | iOS7-iPhone5s |
Xcode6.0 | 2014年9月17日 | iOS8-iPhone6 |
Xcode7.0 | 2015年9月28日 | iOS9-iPhone6s) |
转载地址:http://cykii.baihongyu.com/