如果我将包含以下两个视图层次结构和约束中的任何一个的场景放在一起(在 InterfaceBuilder 中很容易完成),那么一切都会按预期工作......
1)
- 全屏
UIScrollView
(到超级视图所有边缘的距离为 0) - 在 中
UIScrollView
,单个UILabel
,numberOfLines
设置为0
,具有 100% 宽度(0 距离前导和尾随约束),没有高度约束,具有大量文本(1000 行),并且具有常量为 0 的顶部和底部约束(因此从 的边界UILabel
到 的内容视图应该有 0 距离UIScrollView
)。
行为如预期:调整UILabel
大小以适合其内容,这会强制 的内容视图UIScrollView
扩展以适合文本,使所有文本可滚动。
2)
- 一个等于
UILabel
在一些外部视图中的一些内部视图中,这样:numberOfLines
0
UIView
UIView
- 标签的边缘与innerView边缘的距离均为 0 (优先级为 1000)
- innerView的边缘与outerView的边缘的距离均为 0 (优先级为 1000)
- outerView的顶部、前缘和后缘与父视图的距离均为 0(优先级为 1000)
- outerView的高度小于其父视图的全高,由高度约束或底部到父视图的距离约束强制执行,但这个最终约束具有较低的优先级 - 例如 600。
在这种情况下,行为再次符合预期:如果UILabel
的 Content Compression Resistance Priority 大于 600,则 outerView的高度增加以适合所有文本,如果小于,则标签被截断。
然而,尽管在我看来与其他两种情况完全相似,但以下情况并不像我预期的那样工作:
3)
- 全屏
UIScrollView
,和第一种情况一样 - 在 内
UIScrollView
,一个UIView
内部视图,其边缘与 ' 的边缘的距离均为 0UIScrollView
(如第二种情况)。 - 在innerView中,a
UILabel
设置numberOfLines
为0
,文本负载,内容压缩阻力优先级设置为 1000。
基于前两个测试用例,我的期望是UIScrollView
的内容视图应该调整大小以适应标签的文本。然而,相反,内容视图被设置为 的大小,UIScrollView
innerView 也是如此,并且UIScrollView
是不可滚动的。
UILabel
为什么我得到的这种行为与我之前的两个测试用例不一致,当我将它嵌套在自动布局下的视图中时,如何获得工作内容压缩阻力并具有我尊重的内在内容大小UIScrollView
?我看不出自动布局UILabel
在第三种情况下压缩我的任何理由,因为它完全有可能不压缩它并且仍然以与第一种情况完全相同的方式满足所有约束。