根据最高子视图按钮自动调整超级视图高度

Posted

技术标签:

【中文标题】根据最高子视图按钮自动调整超级视图高度【英文标题】:Autosizing superview height according to tallest subview button 【发布时间】:2019-06-06 06:59:10 【问题描述】:

我有以下布局。黄色视图是一个buttonsContainerView,它充当它所拥有的 3 个等宽按钮的容器。所有三个按钮都是黄色buttonsContainerView 的子视图。我给出的所有约束在屏幕截图中都是基本的、可见的和可以理解的,但我仍然会在下面解释它们。

buttonsContainerView - (黄色视图)固定到 viewControllerviewsafeArea 顶部,并插入 20。它的前导和尾随固定到 view 的前导和尾随。 Button 1 - 顶部、底部和前导分别固定到 buttonContainerView 的顶部、底部和前导。尾随固定到 Button 2 的前导。 Button 2 - 顶部和底部分别固定到 buttonsContainerView 的顶部和底部。前导固定到Button 1 尾随。尾随固定到 Button 3 的前导。 Button 3 - 顶部、底部和尾部分别固定到 buttonsContainerView 的顶部、底部和尾部。前导固定到 Button 2 的尾随。 等宽 - 所有三个按钮都被赋予相等的宽度限制。

问题 - 这三个按钮中的任何一个都可能动态地获得更长的标题,并且根据不同的手机屏幕尺寸,它可能无法容纳在单行中。我希望我的buttonsContainerView 的高度根据最高按钮调整其高度,即标题最长的按钮因此高度更大(在屏幕截图中 - Button 2,中心按钮)。就我而言,buttonsContainerView 占据了最小按钮的高度(屏幕截图中的按钮 1 和按钮 2)。如何使用 AutoLayouts 实现这一目标?

【问题讨论】:

Multiline UIButton and autolayout的可能重复 【参考方案1】:

我已经重新创建了您的设置,但没有发现任何问题,这是下图,您能否提供有关此按钮设置的更多信息?或者尝试删除它们并重新添加:

【讨论】:

不适合我。尝试删除所有约束并重新添加它们。您能否运行您的代码并确认其工作方式与您的屏幕截图相同吗?【参考方案2】:

您可以通过使用下一个算法的顶部插入约束组合来实现此目的: 1. 为按钮添加水平约束(左、右、同宽)。 2.为所有按钮添加中心垂直约束。 3. 为所有按钮添加具有 low priority 的顶部插入约束。 4. 为具有hight priority的所有按钮添加更大或相等的顶部插入。

主要思想是按钮垂直插入的低优先级约束,自动布局引擎将尝试满足它,但更大或相等的顶部插入将阻止对小按钮执行此操作。

【讨论】:

以上是关于根据最高子视图按钮自动调整超级视图高度的主要内容,如果未能解决你的问题,请参考以下文章

UIView 调整内容大小

如何使用自动布局根据子视图调整父视图的高度

基于子视图约束的超级视图没有增加高度

如何使用 AutoLayout 根据父高度调整子视图高度而不添加/删除约束

根据子视图高度调整 UITableViewCell(从 xib 创建)高度

如何使用自动布局动态更改超级视图的高度