如何使用 AutoLayout 使子视图确定父/兄弟视图大小?

Posted

技术标签:

【中文标题】如何使用 AutoLayout 使子视图确定父/兄弟视图大小?【英文标题】:How to make a child view determine parent/sibling view size with AutoLayout? 【发布时间】:2019-09-30 18:01:45 【问题描述】:

我有两个垂直堆叠的UIViews,以及一个像这样包围它们的父视图:

视图 B 是一个水平堆栈视图,我可以用代码动态地向它添加子视图。我想要的是:

    View B 宽度变化时,父视图宽度随之变化。 View A 的宽度随着父级的变化而变化,并重新绘制自身以适应新的尺寸。

我为视图 A 和视图 B 添加了约束,使其前导和尾随与父视图相同。我认为当视图 B 增长时,它会将父视图“推”到与自身一样宽,而父视图会将视图 A“拉伸”到相同的宽度。

但事实证明,由于 View A 有其初始宽度,因此父视图宽度受此限制,而 View B 宽度受相同宽度限制。视图 B 没有增长,而是被挤压。

如何让视图 B 确定其他视图的宽度?我希望使用约束,而不是每次视图大小更改时设置框架。

【问题讨论】:

如果您希望视图 B 决定父视图和视图 A 的宽度,您需要视图 A not 具有“初始宽度”。 @matt 如果我需要视图 A 或父视图具有初始宽度怎么办? (在我的情况下,它是屏幕的宽度)。我想我的问题是:当涉及多个视图之间的约束时,如何指定哪个视图指示? @NeoWang 在将子视图添加到视图 B 后,您是否尝试设置父视图宽度?您可以为父视图定义宽度约束,添加子视图后,您可以获得视图 B 框架宽度并将其设置为父视图宽度约束。 【参考方案1】:

如果要改变大小,只需将视图 A 的宽度更改为大于或等于即可。这样它可以是那个大小或更大。在同尺寸的inspector中,有一个“Content Compression Resistance Priority”。数字越大,视图缩小的可能性就越小。如果您在视图 B 上将阻力更改为 1000,则不太可能不正确地调整大小。

【讨论】:

以上是关于如何使用 AutoLayout 使子视图确定父/兄弟视图大小?的主要内容,如果未能解决你的问题,请参考以下文章

使用 AutoLayout 并确保父视图的边界在调整大小时适合子视图

使子视图组向下填充父组的其余部分

SB中使用Autolayout设置到父视图的间距为0

添加到父视图时向 UITableView 添加 AutoLayout 约束

如何使子组件使用父组件样式[重复]

访问 - 使用父表单上的按钮使子表单字段不可见:)