我有一个似乎有效的解决方案,但我想确保它是安全的并按预期使用该工具。我可以将我的问题归结为这种情况 - 我有一个 UIView 包含多个 UILabel,垂直堆叠。每个标签都可以填充垂直环绕和扩展标签的任意文本。在视图中堆叠标签的自动布局约束是微不足道的。我想做的是让 UIView 将其首选高度(视图的高度应该适合所有标签)通过intrinsicContentSize
. 但是,内部布局需要解决,才能返回合适的高度。我的理解是求解器在从返回后保证是完整的[super layoutSubviews]
,这就是我正在做的事情:
- (void)layoutSubviews
{
[super layoutSubviews];
// solver's complete, now we can measure?
[self invalidateIntrinsicContentSize];
}
我的intrinsicContentSize
实现是指最后一个标签的框架来计算高度。这一切似乎都适用于我目前的情况,但这让我感到紧张。似乎求解器在布置其内部时要求当前视图的 intrinsicContentSize 。我不会详细介绍,但我遇到了这种模式陷入无限循环的情况。我可以通过调整我的一些布局代码来解决这个问题——这并没有激发信心。
有一个更好的方法吗?这似乎是一件很常见的事情,当我开始解决这个问题时,我认为这就是 intrinsicContentSize 的用途。我见过的 intrinsicContentSize 的实现一直都是微不足道的——硬编码维度的大小,或者测量不依赖于已解决的内部布局的单个视图。
注意,我不能只通过NSString sizeWith...
方法来测量标签,因为内部布局太复杂了。
请注意,我探索了 using systemLayoutSizeFittingSize:
,但从 intrinsicContentSize 调用它会导致无限循环。
任何回应将不胜感激!提前致谢!