博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NSLayoutConstraint
阅读量:6856 次
发布时间:2019-06-26

本文共 1833 字,大约阅读时间需要 6 分钟。

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艺术视觉描述的字符串的约束。 
      1
      + (
      NSArray 
      *)constraintsWithVisualFormat:(
      NSString 
      *)format options:(
      NSLayoutFormatOptions
      )opts metrics:(
      NSDictionary 
      *)metrics views:(
      NSDictionary 
      *)views;
    • constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant: 
      创建一个定义的指定视图的两个属性之间关系的约束。 
      1
      + (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.

转载地址:http://roiyl.baihongyu.com/

你可能感兴趣的文章
如何根据指定软件版本制作属于自己的puppet yum源
查看>>
Linux下架设rsync服务器
查看>>
windows 屏幕坐标 窗口坐标 客户区坐标 逻辑坐标 设备坐标之间的关系及转换
查看>>
在Foreda8上试安装Apchehttpd-2.4.6.tar.gz
查看>>
基于S3C2410的VIVI移植
查看>>
Entity Framwork one to one problem
查看>>
[转] Attach、Detach和DeleteObject
查看>>
[转] C# 获取程序运行目录
查看>>
【OpenCV学习】极坐标变换
查看>>
使用open***构建安全***
查看>>
模仿支付宝支付密码框思路
查看>>
docker 容器的网络配置
查看>>
开源监控软件的配置:cacti,nagios
查看>>
Python多线程之threading模块
查看>>
第 6 章 单区域 OSPF
查看>>
Android图片开发内幕--基础篇
查看>>
LVS DR模式
查看>>
ZooKeeper 的安装 以及配置说明
查看>>
iOS10推送通知(本地&远程)/Swift
查看>>
标准交互及UED、埋点及锚应用、外部调用原则。请教一下哪位大佬知道这三个的应用?求助...
查看>>