iOS 屏幕适配发展简史

iPhone 3GS、iPhone 4

  • 没有屏幕适配可言
  • 全部用frame、bounds、center进行布局
  • 很多这样的现象:坐标值、宽度、高度值全部写死
    UIButton  *btn = [[UIButton alloc]init];
    btn.frame = CGRectMake (0,1,100,30);
    

iPad 、 iPhone 横屏出现

  • 出现Autoresizing 技术
    • 让横竖屏适配相对简单
    • 让子控件可以跟随父控件的行为自动发生相应变化
    • 前提是: 关闭AutoLayout 功能
    • 局限性
      - 只能解决子控件跟父控件的相对关系问题
      - 不能解决兄弟控件的相对关系问题
  UIView  *blueView =  [[UIView alloc]init];
  blueView.backgroundColor = [UIColor blueColor];
  CGFloat  wh  = 100;
  blueView.frame = CGRectMake(0, 0, self.view.bounds.size.width, wh);
  blueView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin;

  [self.view addSubview:blueView];//
  
  
 /** 注意:前4个和后两个的字面意思
  UIViewAutoresizingFlexibleLeftMargin   = 1 << 0,距离左边距离不固定(左边不固定右边就是固定的)
  UIViewAutoresizingFlexibleRightMargin  = 1 << 2,距离右边距离不固定
  UIViewAutoresizingFlexibleTopMargin    = 1 << 3,距离顶部距离不固定
  UIViewAutoresizingFlexibleBottomMargin = 1 << 5距离底部距离不固定

  UIViewAutoresizingFlexibleHeight       = 1 << 4,高度跟随父控件的高度进行自动伸缩
  UIViewAutoresizingFlexibleWidth        = 1 << 1,宽度跟随父控件的宽度进行自动伸缩
  */

上述代码注意点:

  • 1、 addSubView: 必须在 Autoresizing 配置之后
  • 2、 类似 1 << 2 称之为 位移运算, 这个枚举为位移枚举。详情见:https://www.jianshu.com/p/2e7c84efcb94

iOS 6 —— autolayout(自动布局)

  • 随着 iPhone5 \ iPhone5s 等的发布苹果设备不同尺寸的屏幕变得越来越多, 不仅要求能根据控件父子关系来设置相对位置,也要求能根据任意控件之间的关系来设置位置
  • 因为 autoresizing 只能设置当前控件与父控件之间的相对关系,当遇到要设置兄弟控件之间的关系的时候 autoresizing 就无能为力了
  • autolayout 技术主要解决的问题:控件位置的参照关系不再局限于父控件

iOS 8 —— size classes + autolayout

  • 使用 size classes + autolayout 进行屏幕适配
  • 当 iPhone6 发布以后,苹果设备的屏幕越来越多(以后也可能出现更多不同大小的屏幕),为了能更容易的适配不同的屏幕,苹果推出了 size classes 技术
  • 通过 autolayout 设置的约束,约束一旦添加就会应用于各种屏幕(也就是说在各种不同的屏幕下都使用相同的约束)
  • 通过 size classes + autolayout 的方式, 可以为不同尺寸的屏幕设置不同的约束举例: iPhone 下的计算器,在横屏、竖屏下的不同表现
  • size classes 技术主要解决的问题: 为不同尺寸的屏幕, 通过 autolayout 设置不同的约束

iOS 9 —— size classes + autolayout + StackView

  • Stack View 的核心便是方便垂直或水平排布多个 subview
  • 类似于 android 的 LinearLayout
  • Stack View 最有用的就是它会自动为每个 subview 创建和添加 Auto Layout 约束,程序员可以通过选项配置subview的大小、排布以及彼此间的间距使用 stackview 主要简化在线性方向上,重复设置控件布局约束的问题

如果您有什么疑问或者书写歧义,非常感激您能留言~

你可能感兴趣的:(iOS 屏幕适配发展简史)