AutoLayout

适配:

  • 适应、兼容各种不同情况

  • 移动开发中常见种类:

    • 系统适配:针对不同版本的操作系统进行适配

    • 屏幕适配:针对不同大小的屏幕尺寸进行适配

屏幕适配

  • 屏幕方向:横屏、竖屏

屏幕适配发展历史

  • iPhone3GS\iPhone4
    • 没有屏幕适配可言
    • 用frame/bounds/center进行布局
    • 以前的现象:坐标值、宽度高度值全部写死
      UIButton *btn = [[UIButton alloc] init];
      btn.frame = CGRectMake(0,0,320 - b,150 - c);
      
  • iPad出现、iPhone横屏
    • 出现Autoresizing技术
      • 让横竖屏适配相对简单
      • 让子控件随父控件的行为自动发生相应变化
      • 前提是关闭AutoLayout才可以使用
      • 局限性
          - 只能解决子控件跟父控件的相对关系问题
          - 不能解决兄弟控件的相对关系问题
        
redView.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleRightMargin |UIViewAutoresizingFlexibleWidth;
UIViewAutoresizingNone                 = 0,
 UIViewAutoresizingFlexibleWidth        = 1 << 1,
 UIViewAutoresizingFlexibleHeight       = 1 << 4,

 UIViewAutoresizingFlexibleLeftMargin   = 1 << 0,拉伸,不固定
 UIViewAutoresizingFlexibleRightMargin  = 1 << 2,
 UIViewAutoresizingFlexibleTopMargin    = 1 << 3,
 UIViewAutoresizingFlexibleBottomMargin = 1 << 5
  • iOS 6.0(Xcode4)开始

    • 出现了Autolayout技术
    • 从Xcode5.0(iOS 7.0)开始,开始流行Autolayout
    • “自动布局”技术,专门用来布局UI界面的
  • Autolayout的2个核心概念

    • 参照
    • 约束
  • Autolayout的警告和错误

    • 警告

      • 控件的frame不匹配所添加的约束
      • 比如约束控件的宽度为100, 而控件现在的宽度是110
    • 错误

      • 缺乏必要的约束
      • 只约束了宽度和高度, 没有约束具体的位置

      • 两个约束冲突, 比如

      • 1个约束控件的宽度为100, 1个约束控件的宽度为110
基于Autolayout的动画
在修改了约束之后,只要执行下面代码,就能做动画效果
[UIView animateWithDuration:1.0 animations:^{
    [添加了约束的view layoutIfNeeded];
}];
  self.spacingContraint.constant = 50;
    self.widthContraint.constant = 100;
    self.height.constant = 100;
    [UIView animateWithDuration:1.5 animations:^{

        [self.heightContraint layoutIfNeeded];
    }];

>

results matching ""

    No results matching ""