• iOS UI基础06


    • Autoresizing

      • 1.Autoresizing四周的四根线的作用:

        • 只要勾选上某一根, 那么当前控件距离父控件的距离就是固定的, 当前是多少, 以后永远都是多少
      • 2.Autoresizing中间两条线的作用:

        • 只要勾选上水平方向的线, 那么当前控件的宽度就会随着父控件的宽度等比拉伸
        • 只要勾选上垂直方向的线, 那么当前控件的高度就会随着父控件的高度等比拉伸
      • 3.无论是将子控件固定在父控件的某一个位置 还是让子控件随着父控件的宽高的变化而变化

      • 4 都是父子关系,所以Autoresizing只能约束父子控件之间的关系, 不能约束兄弟控件之间的关系

      • 属性

         @property(nonatomic) UIViewAutoresizing autoresizingMask;
         // simple resize. default is UIViewAutoresizingNone
        // 设置子控件的autoresizing
         注意: 代码中的上下左右和Storyboard中的是相反的
         Storyboard中勾选上左边, 就代表当前控件和父控件的左边的距离是固定的
         而在代码中如果写上FlexibleLeftMargin, 就代表当前控件和父控件的左边是可拉伸的
         换句话说就是: 如果设置了FlexibleLeftMargin, 就代表着右边是固定的
        
         UIViewAutoresizingFlexibleLeftMargin // 左边可以伸缩
         UIViewAutoresizingFlexibleRightMargin // 右边可以伸缩
         UIViewAutoresizingFlexibleTopMargin // 顶部可以伸缩
         UIViewAutoresizingFlexibleBottomMargin // 底部可以伸缩
        
         // 以下两个和Storyboard中的是一样的
         UIViewAutoresizingFlexibleWidth // 宽度可以伸缩
         UIViewAutoresizingFlexibleHeight // 高度可以伸缩
        
    • Autolayout

      • 1.约束

        每在Storyboard中添加一个设置(autolayout的设置), 就代表添加一个约束
        
      • 2.错误(红色箭头)

        如果看到Storyboard中有红色的箭头, 代表约束有错误
        注意: 约束有错误, 不代表运行会错误, 约束有错误同样可以运行
        注意: 红色箭头是程序员必须解决的
        
        • 3.为什么会有约束错误?
          • 3.1缺少约束
            • autolayout的本质和frame差不多
            • 如果通过frame来设置一个控件, 必须设置这个控件的x/y/w/h, 控件才能按照我们的需求显示
            • 如果是通过autolayout来设置一个控件, 也必须设置这个控件的x/y/w/h, 控件才能按照我们的需求显示
            • 也就是说, 如果说x/y/w/h只要有一个没有设置都会报错, 就是缺少约束
          • 3.2约束冲突
            • 约束可以重复添加
            • 例如先约束宽度等于100, 又添加一个约束, 约束宽度等200, 那么就会报错
      • 4.注意

        • 距离顶部有20 == 相当于设置了Y
        • 距离左边有20 == 相当于设置了x
      • 5.警告

        • 如果看到Storyboard中有黄色的箭头, 就是警告
        • 代表着当前控件预览的位置或者尺寸和我们约束的位置尺寸不一样
        • 注意:黄金警告并不会影响我们运行
        • 注意:黄色箭头, 程序员可以忽略
        #warning 注意点: 如果通过代码来设置Autolayout约束, 那么必须先禁用Autoresizing
        redView.translatesAutoresizingMaskIntoConstraints = NO;
    
    
         Item == first item
         attribute == first item需要设置的约束类型
         relatedBy == Relatio(等于)
         toItem ==  Second item
         attribute == Second item的约束类型
         multiplier == 乘以
         constant == 加上多少
        // 2.1宽度
        NSLayoutConstraint *width = [NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:kNilOptions multiplier:1.0 constant:100.0];
        // 将约束添加给自己
        [redView addConstraint:width];
    
    • VFL

          // 1.禁止红色View的Autgoresizing
        blueVeiw.translatesAutoresizingMaskIntoConstraints = NO;
        redVeiw.translatesAutoresizingMaskIntoConstraints = NO;
      
        // 2.利用VFL添加约束
        /*
         VisualFormat: VFL语句
         options: 对齐方式等
         metrics: VFL语句中使用到的一些变量
         views: VFL语句中使用到的一些控件
         */
        // 3.1设置蓝色
        // 3.1.1水平方向
        NSArray *blueHCos = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-20-[blueVeiw]-20-|" options:kNilOptions metrics:nil views:@{@"blueVeiw":blueVeiw}];
        [self.view addConstraints:blueHCos];
      
        // 3.1.2垂直方向
        NSArray *blueVCos = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-20-[blueVeiw(==50)]" options:kNilOptions metrics:nil views:@{@"blueVeiw":blueVeiw}];
         [self.view addConstraints:blueVCos];
      
    • Masonry框架

      ```objc

       //define this constant if you want to use Masonry without the 'mas_' prefix
      define MAS_SHORTHAND
      // 只要添加这个宏,就可以去掉Masonry框架中对象访问对象属性前面的mas_属性, 和方法前的mas_前缀
      
      // 例如添加前的写法
      
       make.left.equalTo(self.view.mas_left).with.offset(20);
      
      // 例如添加后的写法
      
      make.left.equalTo(self.view.left).with.offset(20);
      
      //define this constant if you want to enable auto-boxing for default syntax
      define MAS_SHORTHAND_GLOBALS
      // 只要添加上这个宏, 给equalTo传递参数的时候, 就可以直接传递基本数据类型 ,系统会自动包装
      // 如果没有添加上面这个宏, 那么给equalTo传递参数的时候, 必须传递对象
      // 如果要传递基本数据类型必须使用mas_equalTo
      
      // 只需要在导入Masonry.h之前, 添加上一上两个宏, 就可以简化代码
      UIView *blueVeiw = [[UIView alloc] init];
      blueVeiw.backgroundColor = [UIColor blueColor];
      [self.view addSubview:blueVeiw];
      self.blueVeiw = blueVeiw;
      
      UIView *redVeiw = [[UIView alloc] init];
      redVeiw.backgroundColor = [UIColor redColor];
      [self.view addSubview:redVeiw];
      
      // 2.禁止红色View的Autgoresizing
       blueVeiw.translatesAutoresizingMaskIntoConstraints = NO;
       redVeiw.translatesAutoresizingMaskIntoConstraints = NO;
      
      // 3.添加蓝色的约束
       [blueVeiw makeConstraints:^(MASConstraintMaker *make) {
        make.left.equalTo(self.view.left).offset(20);
        make.right.equalTo(self.view.right).offset(-20);
        make.top.equalTo(self.view.top).offset(20);
        make.height.equalTo(50);
      }];
      
      // 4.添加红色的约束
       [redVeiw makeConstraints:^(MASConstraintMaker *make) {
        make.top.equalTo(blueVeiw.bottom).offset(20);
        make.height.equalTo(blueVeiw.height);
        make.right.equalTo(blueVeiw.right);
        make.width.equalTo(blueVeiw.width).multipliedBy(0.5);
      

      }];

      //注意: 在Storyboard中约束是可以重复添加的, 通过Masonry添加约束也是可以重复的, 要注意重复添加导致的错误和冲突
      
      // 使用makeConstraints, 每次都会添加新的约束, 也就是会导致重复添加
      // [self.blueVeiw makeConstraints:^(MASConstraintMaker *make) {
      // make.height.equalTo(100);    }];
      
      // 要更新约束使用updateConstraints
      // updateConstraints特点: 如果没有设置过, 就添加一个新的
       // 如果已经设置过了, 就更新以前设置的那一个
       [self.blueVeiw updateConstraints:^(MASConstraintMaker *make) {
        make.height.equalTo(100); }];
      
    // 清空约束 remakeConstraints
    [self.blueVeiw remakeConstraints:^(MASConstraintMaker *make) {    }];
  • 相关阅读:
    Java设计模式
    Java复习,Java知识点以及Java面试题(七)
    Java复习,Java知识点以及Java面试题(六)
    Java复习,Java知识点以及Java面试题(五)
    Java复习,Java知识点以及Java面试题(四)
    Java复习,Java知识点以及Java面试题(三)
    Java复习,Java知识点以及Java面试题(二)
    代理模式
    String的花式比较
    spring配置shiro的案例学习笔记
  • 原文地址:https://www.cnblogs.com/liujiaoxian/p/4703490.html
Copyright © 2020-2023  润新知