Ios 它是如何做到的';UILabel实现intrinsicContentSize?
正如我们所知,UILabel具有intrinsicContentSize,我的难题是当我们将标签固定到其superview(例如,前导和尾随偏移量为10)并将numberOfLines设置为0时,假设superview是宽度为320的viewcontroller视图,label如何知道其宽度为300。Ios 它是如何做到的';UILabel实现intrinsicContentSize?,ios,objective-c,Ios,Objective C,正如我们所知,UILabel具有intrinsicContentSize,我的难题是当我们将标签固定到其superview(例如,前导和尾随偏移量为10)并将numberOfLines设置为0时,假设superview是宽度为320的viewcontroller视图,label如何知道其宽度为300。 另外,当存在压缩标签的多重约束时,标签如何知道它已压缩并重新计算其大小 intrinsicContentSize独立于任何上下文,包括应用于标签的任何约束。这实际上就是内在的意义 因此,当您询问标
另外,当存在压缩标签的多重约束时,标签如何知道它已压缩并重新计算其大小 intrinsicContentSize独立于任何上下文,包括应用于标签的任何约束。这实际上就是内在的意义 因此,当您询问标签的intrinsicContentSize时,它不知道其宽度将为300,实际上它返回适合其内容的任何宽度。继续,检查它:询问包含“foo”或“Lorem ipsum dolor sit amet,concertetur adipising elit.Vestibulum vitae sapien nec elit luke incident”的标签的内在内容大小。“你不会得到同样的结果。” 你可能会想:如果intrinsicContentSize是(52,21)或(633,21),那么它到底为什么以(300,21)结尾 答案很简单:intrinsicContentSize生成隐式约束,其优先级由标签的contentHuggingPriority和contentCompressionResistancePriority控制。这些数字通常少于1000。相反,前导偏移和尾随偏移的优先级为1000,即最大值。因此偏移约束在最终布局中获胜,标签以300宽度结束
现在尝试将contentHuggingPriority和contentCompressionResistancePriority设置为1000:您将看到冲突。你知道为什么吗?根据uiscreen sizeTHX计算尺寸。我觉得UILabel使用属性
preferredMaxLayoutWidth
来计算它的高度。默认值是0,我想知道在上面的例子中这个值是如何设置为300的。现在这是一个不同的问题。preferredMaxLayoutWidth确实由intrinsicContentSize使用:它告诉标签何时应该换行。我不确定它何时被设置为300,但我怀疑是情节提要或包含UILabel的xib文件。preferredMaxLayoutWidth是标签的大小检查器中最上面的项。