• iOS自动布局


    自动布局:

    1.Autoresizing

       当UIView的autoresizesSubviews是YES时,(默认是YES), 那么在其中的子view会根据它自身的autoresizingMask属性来自动适应其与superView之间的位置和大小。注意: autoresizing只能设置当前控件与父控件之间的相对关系,可以进行屏幕适配

    【autoresizingMask是子视图的左、右、上、下边距以及宽度和高度相对于父视图按比例变化,例如:

    UIViewAutoresizingNone 不自动调整。

    UIViewAutoresizingFlexibleLeftMargin 自动按比例调整与superView左边的距离,且与superView右边的距离不变。

    UIViewAutoresizingFlexibleRightMargin 自动按比例调整与superView的右边距离,且与superView左边的距离不变。

    UIViewAutoresizingFlexibleTopMargin  自动按比例调整与superView的顶部距离,且与superView底部的距离不变。

    UIViewAutoresizingFlexibleBottomMargin 自动按比例调整与superView的底部距离,且与superView顶部的距离不变。

    UIViewAutoresizingFlexibleWidth 自动按比例调整宽度。

    UIViewAutoresizingFlexibleHeight 自动按比例调整高度。】

    相关demo:UI基础day10-10自定义布局-代码-02-用代码实现autoresizing

    2.Autolayout  (勾选Use Auto Layout)—>一般需要设置上下左右或上下宽高四个约束,特殊控件不一定必须4个约束

     随着iPhone发布苹果设备不同尺寸的屏幕变得越来越多, 不仅要求能根据控件父子关系来设置相对位置, 也要求能根据任意控件之间的关系来设置位置

    因为 autoresizing只能设置当期控件与父控件之间的相对关系, 当遇到要设置兄弟控件之间的关系的时候 autoresizing就无能为力了,所以就需要Autolayout通过设置某控件与任意其他控件间的关系来决定如何显示这个控件, 不仅仅局限与父子控件

    补充:【autolayout:不能满足设置一套约束,在所有的屏幕都适配,所以出现了sizeclass,size用来区分屏幕

    sizeclass没有宽高:把宽高各分成了三种类型

    regualr

    compact

    any

    当宽度和高度各是某种类型的时候,就会确定某一类屏幕

    所以确定九类屏幕,只是不屏幕进行了区分,具体的约束关系

    还需要autolayout实现】

    注意:autoresizing 和autolayout 二者是互斥的,同时只能使用其中一种,当使用autoresizing的时候必须禁用autolayout, 当使用autolayout的时候就无法使用Autoresizing了。

    Autolayout当中有俩个核心概念:参照和约束

    参照:通过参照其他控件或父控件来设置当前控件的位置和大小

    约束Constraint(规则):通过添加约束限制控件的位置和大小

    代码实现Autolayout的步骤

    利用NSLayoutConstraint类创建具体的约束对象

    添加约束对象到相应的view上

    - (void)addConstraint:(NSLayoutConstraint *)constraint;

    - (void)addConstraints:(NSArray *)constraints;

    代码实现Autolayout的注意点

    1》 要先禁止autoresizing功能,设置view的下面属性为NO

    view.translatesAutoresizingMaskIntoConstraints = NO;

    2》 添加约束之前,一定要保证相关控件都已经在各自的父控件上

    3》不用再给view设置frame

    了解内容,大部分都用SB来设置约束

    【一个  《NSLayoutConstraint》  对象就代表一个约束

    创建约束对象的常用方法

    +(id)constraintWithItem:(id)view1 attribute:(NSLayoutAttribute)attr1 relatedBy:(NSLayoutRelation)relation toItem:(id)view2 attribute:(NSLayoutAttribute)attr2 multiplier:(CGFloat)multiplier constant:(CGFloat)c;

    view1 :要约束的控件

    attr1 :约束的类型(做怎样的约束)

    relation :与参照控件之间的关系

    view2 :参照的控件

    attr2 :约束的类型(做怎样的约束)

    multiplier :乘数

    c :常量

    例子:[NSLayoutConstraint constraintWithItem:view1

          attribute:NSLayoutAttributeTop

          relatedBy:NSLayoutRelationEqual

             toItem:superview

          attribute:NSLayoutAttributeTop

         multiplier:1.0

           constant:padding.top]

    自动布局有个核心公式

    obj1.property1 =(obj2.property2 * multiplier)+ constant value

    框架:Masonry,“一个轻量级的布局框架,采用更"优雅"的语法封装自动布局”,不需要使用XIB和Storyboard, 并具有高可读性

    方式一逐个设置 make.top.equalTo

    方式二连续设置 make.top.left.bottom.and.right.equalTo

    方式三一次性设置 make.edges.equalTo

    例子:[view1 mas_makeConstraints:^(MASConstraintMaker *make) {

        make.edges.equalTo(superview).with.insets(padding);

    }];

    SnapKit:SnapKit是Masonry的Swift版 ,方法和Masonry类似

    例子:view1.snp_makeConstraints { (make) -> Void in

        make.edges.equalTo(superview).insets(UIEdgeInsetsMake(10, 10, 10, 10))

    }这句代码的意思是view1+UIEdgeInsetsMake(10, 10, 10, 10)的外边距=superView

    //使用框架的步骤

    //1.首先导入头文件

    //2.在使用框架的地方,导入主要的.h文件

    //3.使用框架不需要去掉autoresizing

  • 相关阅读:
    css的盒子模型由什么组成?
    div盒子水平、垂直居中
    display:none和visibility:hidden的区别
    创建一个多选框,且和文本关联起来(单击文本就像单击该选框一样)
    Canvas和SVG的不同
    js两个页面之间通过URL传参数
    css a标签去除下划线
    css 设置文本垂直居中
    css 边框圆角的方法
    html 文本框css设置边框圆角
  • 原文地址:https://www.cnblogs.com/ansyxpf/p/5422893.html
Copyright © 2020-2023  润新知