zoukankan      html  css  js  c++  java
  • 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.
  • 相关阅读:
    C# 操作配置文件
    C# Excel操作类
    没有找到 mspdb100.dll 的解决办法
    工厂方法模式
    .Net互操作2
    The certificate used to sign “AppName” has either expired or has been revoked. An updated certificate is required to sign and install the application解决
    手机抓包xcode自带命令行工具配合wireshark实现
    expecting SSH2_MSG_KEX_ECDH_REPLY ssh_dispatch_run_fatal问题解决
    使用ssh-keygen设置ssh无密码登录
    远程复制文件到服务器
  • 原文地址:https://www.cnblogs.com/zhanggui/p/4669644.html
Copyright © 2011-2022 走看看