ios - UILabel 怎么不实现 intrinsicContentSize?

标签 ios objective-c

正如我们所知,UILabel 具有 intrinsicContentSize,我的困惑是当我们将标签固定到它的 super View 时,例如前导和尾随偏移量为 10,并将 numberOfLines 设置为 0,假设 super View 是宽度为 320 的 View Controller View ,以及标签如何知道它的宽度是 300。 另一个,当标签被压缩时有多重约束,标签如何知道它被压缩并重新计算它的大小?

最佳答案

intrinsicContentSize 独立于任何上下文,包括应用于标签的任何约束。这其实就是内在的意思。

因此,当您请求标签的 intrinsicContentSize 时,它​​不知道它的宽度将是 300,实际上它会返回适合其内容的任何宽度。继续检查它:询问包含“foo”或“Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum vitae sapien nec elit tongue incident”的标签的 intrinsicContentSize。您不会得到相同的结果。

知道您可能想知道:如果 intrinsicContentSize 是 (52,21) 或 (633,21),为什么它最终会在 (300, 21) 处结束?

答案很简单:intrinsicContentSize 生成隐式约束,其优先级由标签的 contentHuggingPriority 和 contentCompressionResistancePriority 控制。这些通常小于 1000。相反,前导和尾随偏移量的优先级是最大值 1000。因此偏移约束在最终布局中胜出,标签以 300 宽度结束。

现在尝试将 contentHuggingPriority 和 contentCompressionResistancePriority 设置为 1000:您将看到冲突。你知道为什么吗?

关于ios - UILabel 怎么不实现 intrinsicContentSize?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33951879/

相关文章:

ios - Swift - 按名称获取属性崩溃并出现 valueForUndefinedKey 错误

ios - Tableview 搜索栏未正确返回 detailTextLabel(Xcode - Swift)

ios - 在 Interface Builder 中创建的 UIView 未按预期呈现

objective-c - NSDate 和时区差异

ios - 禁用 RightBarButtonItems

ios - 复杂图像(气泡/图钉)和 [UIImage ressizedImageWithCapInsets :]

ios - 未调用 Objective-C UIKit UIAlertViewDelegate

ios - 如何在 init 方法中访问父类(super class)的变量

ios - MKMapView注解点击事件

ios - 如何修复 “Xcode 6 quit unexpectedly"