如何调整超级视图的大小以符合子视图约束

Posted

技术标签:

【中文标题】如何调整超级视图的大小以符合子视图约束【英文标题】:How to resize the superview to conform to the subviews constraints 【发布时间】:2018-04-18 15:43:39 【问题描述】:

我创建了一个自定义 UIView 类,我在其中创建了 2 个 UILabel 和 1 个 UIImageView。我为每个元素设置了约束。由于标签将保存动态文本,因此每个视图将具有不同的高度。如何调整视图的高度?约束(从上到下)是:

View Top > 16 > Label1 > 8 > ImageView > 8 > Label2 > 16 > View Bottom

问题是:我必须用框架初始化 UIView。并且无论我尝试什么,视图总是使用初始化给出的框架的高度。而且我无法计算所有元素的高度并设置新框架,因为标签有时是 1 行,有时是 5 行。

This is how the view looks at runtime This is how its supposed to look like

提前致谢

【问题讨论】:

如果您的布局完全由约束指定,则不需要“真实”框架来初始化UIViewCGRect.zero 很好。视图将自动调整大小。 【参考方案1】:

你必须用框架来初始化视图,但是当初始化后将translatesAutoresizingMaskIntoConstraints设置为false时,传入的框架变得无关紧要。因此,您可以按照@BallpointBen 在 cmets 中的建议进行操作并传入.zero

let newCustomView = CustomView(frame: .zero)
newCustomView.translatesAutoresizingMaskIntoConstraints = false

// auto layout constraints should now determine height

【讨论】:

效果很好。谢谢。我已经写了很多行,但没有任何改变。至少现在我知道如何在其他项目中实现这一点:D

以上是关于如何调整超级视图的大小以符合子视图约束的主要内容,如果未能解决你的问题,请参考以下文章

如何将间距约束指定为超级视图大小的比例?

自动布局 - 定义应该改变哪个约束首先调整它的大小

启用自动布局的 iOS 调整视图大小

UIView 调整内容大小

如何使用 Autolayout 调整我的超级视图大小以匹配其子视图的大小?

以 Autolayout 视觉形式调整子视图的大小