• NSLayoutConstraint


    NSLayoutConstraint

    约束定义了两个用户界面对象必须满足约束布局系统的关系。每一个约束都是一个线性的方程式,就像下面一样:

    item1.attribute1 = multiplier x item2.attribute2 + constant

    在这个方程式中,attribute1和attribute2是自动布局调整去解决约束问题的变量。其他值都是我们在创建变量的时候自己定义的。例如,如果你正在定义两个按钮的关系位置,你可能会说:第二个按钮的前言应该是第一个按钮后沿8点。线性方程式表达这个关系就是下面这样:

    button2.leading = 1.0 x button1.trailing + 8.0

    自动约束然后会修改前沿和后沿的值去让方程式相等。需要注意的是:自动布局不仅仅是简单的指派值让方程式左右相等。相反的。为了满足约束,系统会修改可能一或者两个属性。

    约束是方程式的实际意义是这样的:你可以交换两个元素的位置去更清晰的表达你希望要的关系。然而,如果你交换顺序,你必须颠倒乘数和常量。例如下面的这两个:

    button2.leading = 1.0 x button1.trailing + 8.0

    button1.trailing = 1.0 x button2.leading - 8.0

    一个有效的布局定义式设置约束只有一种可能的解决方案。有效的布局也指清晰、没有矛盾的布局。有不仅一种解决方案的约束是模糊不清的。没有有效的解决方案的约束是矛盾的。

    此外,约束不仅仅局限于等价关系。他们也可以用大于等于或者小于等于去描述两个属性之间的关系。约束有优先级,从1-1000。优先级为1000的约束是必须的。所有优先级小于1000是可选的。默认的情况下,所有约束都是必须得(优先级为1000)。

    解决必须约束之后,自动布局尝试去解决所有其他可选约束的优先级(从高到低)。如果自动布局无法解决可选约束问题,它会尽可能地区接近渴望的结果,然后处理下一个约束。

    这种不等式、等式和属性的组合,给你更大的灵活性和力量。通过连接倍数的约束,你可以定义布局,动态地随着用户界面的改变去动态调整元素的大小和位置。

    创建约束

      • constraintsWithVisualFormat:options:metrics:views:
        创建一个被ASCII艺术视觉描述的字符串的约束。
        + (NSArray *)constraintsWithVisualFormat:(NSString *)format options:(NSLayoutFormatOptions)opts metrics:(NSDictionary *)metrics views:(NSDictionary *)views;
      • constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:
        创建一个定义的指定视图的两个属性之间关系的约束。
        + (instancetype _Nonnull)constraintWithItem:(id _Nonnull)view1 attribute:(NSLayoutAttribute)attr1 relatedBy:(NSLayoutRelation)relation toItem:(id _Nullable)view2 attribute:(NSLayoutAttribute)attr2 multiplier:(CGFloat)multiplier constant:(CGFloat)c 
    • Parameters
    • Description
    • view1
    • 约束左侧的视图
    • attr1
    • 约束左侧视图的属性
    • relation
    • 左侧约束和右侧约束的关系
    • view2
    • 右侧约束的视图
    • attr2
    • 约束右侧视图的属性
    • multiplier
    • 右侧约束的属性倍乘一个常数 作为得到修改过的一部分
    • c
    • 在倍乘的基础上再加上的一个常数,得到最优的修改过的属性
      • 返回值:返回一个约束对象。
        讨论:约束本质就是一个线性的等式:
        view1.attr1 <relation> multiplier x view2.attr2 + c
        如果你希望的约束没有第二个视图和属性,使用nil和NSLayoutAttributeNotAnAttribute.
  • 相关阅读:
    P5304旅行者(比bk201还要流氓的解法)
    考试T1护花
    考试T2修剪草坪
    考试T3麻将
    账号密码
    T7
    P2885 [USACO07NOV]电话线Telephone Wire
    P4965 薇尔莉特的打字机
    P1505 [国家集训队]旅游
    T2
  • 原文地址:https://www.cnblogs.com/zhanggui/p/4669644.html
Copyright © 2020-2023  润新知