2.PreferredMaxLayoutWidth
- 支持基于约束的布局
在自动布局中,视图有“内在内容大小”的概念:适合视图的宽度和高度(要么,要么,要么)。布局系统将尝试给视图至少这么大的空间,以“高”优先级,可配置为视图的“抗压缩”。
布局系统独立处理宽度和高度。例如,如果分段控件的文本足够长,不能水平放置,那么它的固有高度仍将试图满足要求。这对于具有一些定义大小的视图(如按钮、图像、滑块和小标签)非常有效。
但是,自动换行的视图具有更复杂的行为:它们的宽度和高度相互作用。他们可以用宽换高,反之亦然。
这不能单纯用约束来表示。证明:考虑一个简化的模型,忽略断词和复杂的文本内容。我们希望一个视图有恒定的面积,即宽×高=恒定。约束的形式必须是attribute1 = multiplier × attribute2+ constant(这样系统才能提供一定的性能保证)。没有办法用第二个方程来表示第一个方程;因此,没有办法纯粹用约束来表示包装。
我们不能把宽度和高度都作为自由变量,由约束引擎来解决。最简单的方法——也是苹果使用的方法——是固定宽度,并保留高度变量(取决于标签的内容)。
1.只设置约束宽度,不设置preferredMaxLayoutWidth 且numberOfLine = 0; UILable 高度正常,宽度显示按照约束的宽度大小。
//1.只设置约束宽度,不设置preferredMaxLayoutWidth 且numberOfLine = 0;
_myLabel.text = @"在消除编译警告的时候,发现一个叫做Automatic Preferred Max Layout Width is not available on iOS versions prior to 8.0,几番探索终于发现是一个UILabel的";
2.只设置preferredMaxLayoutWidth,UILabel高度正常,宽度按照preferredMaxLayoutWidth宽度显示。
3.同时设置 preferrredMaxLayoutWidth 和 约束宽度(能计算出的)
1.preferredMaxLayoutWidth < 约束的宽度时, 计算出的行高大约实际高度
2.preferredMaxLayoutWidth > 约束的宽度是,计算出的行高小于实际高度