1.动态修改约束的优先级
优先级可根据数字设置范围 0~1000; 系统框架提供
required(1000)、
defaultHigh(750)、
defaultLow(250)、
fittingSizeLevel(50)
设置约束时,默认的优先值就为required(1000),所以我们在等界面运行起来之后再把它改为其他的值时会报错,例如:1000 改为 250 或 把 250改为 1000
会报如下错误:
Mutating a priority from required to not on an installed constraint (or vice-versa) is not supported. You passed priority 250 and the existing priority was 1000.'
所以我们只能在一开始初始化约束的时候就把优先值设置为1000 以下就可以随便修改约束优先值为1000以下的任何正数值。
- 触发约束变化包括
Activating或Deactivating
设置constant或priority
添加和删除视图
遇到约束变化会重新计算layout,获取新值后会call它的superview.setNeedsLayout()
3.关于使用第三方框架 SnapKit 或 masonry
使用 updateConstraints 方法时一般只是在原有的约束上面修改常常量值, 不可以变更约束的对象, 约束的属性, 约束的优先值
使用 remakeConstraints 时,应注意更本视图相关的约束全部会移除后再重新添加你想要的约束, 包括该视图约束相关的子视图约束也会被清除
当我们想拿到 约束时,只能用一个为外部的变量获取,例如:
4、可以自适应的控件
Hugging priority让这些控件不要大于某个设定的值,默认优先级为250。例如:三个 UIlaebl 水平布局, 当他们的文本总长度超出了屏幕的宽度时,你想其中的一个 Label 的文案优先展示出来时,可以把 Hugging priority 设的比其他两个优先级高
Content Compression Resistance就是让控件不要小于某个设定的值,默认优先级为750
网友评论