5月30日-Autolayout

0530-AutoLayout

苹果的屏幕尺寸

  • iPhone的尺寸
    • 3.5inch、4.0inch、4.7inch、5.5inch
  • iPad的尺寸
    • 7.9inch、9.7inch
  • 屏幕的方向

  • 竖屏
  • 横屏
  • 什么是Autolayout

  • AutoLayout是一种“自动布局”技术,专门用来布局UI界面
  • Autolayout自iOS 6开始引入,由于Xcode4的不给力,当时并没有得到很大推广
  • 自iOS 7(Xcode 5)开始,Autolayout的开发效率得到很大的提升
  • 苹果官方也推荐开发者尽量使用Autolayout来布局UI界面
  • Autolayout能很轻松地解决屏幕适配的问题
  • 介绍

  • 在Autolayout之前,有Autoresizing可以作屏幕适配,但局限性较大,有些任务根本无法完成
  • 相比之下,Autolayout的功能比Autoresizing强大很多
  • Autolayout的2个核心概念
    • 参照
    • 约束
  • Autolayout的警告和错误

  • 警告
    • 控件的frame不匹配所添加的约束,比如约束控件的宽度为100,而控件现在宽度是110
  • 错误
    • 缺乏必要的约束,比如只约束了宽度和高度,没有约束具体的位置
    • 两个约束冲突,比如1个约束控件的宽度100,另外一个约束控件的位置为110
  • 代码实现Autolayout的步骤

  • 利用NSLayoutConstraint类创建具体的约束对象
  • 添加约束对象到相应的View上

    - (void)addConstraint:(NSLayoutConstraint *)constraint;
    - (void)addConstraints:(NSArray *)constraints;
    
  • 代码实现Autolayout的注意点

  • 要先禁止autoresizing功能,设置View下面的属性为NO
    view.translatesAutoresizingMaskIntoConstraints = NO;
    
  • 添加约束之前,一定要保证相关控件都已经在各自的父控件上
  • 不用再给View设置frame
  • Autolayout的UILabel

  • 在没有Autolayout之前,UILable的文字内容总是居中显示,导致顶部和底部会有一大片空缺区域
  • 有Autolayout之后,UILabel的Bounds默认会自动包住所有的文字内容
  • 基于Autolayout的动画

  • 在修改了约束之后,只要执行下面的代码,就能做动画效果
    [UIView animateWithDuration:1.0 animations:^{
      [添加了约束的view layoutIfNeeded];
    }];
  • 你可能感兴趣的:(5月30日-Autolayout)