根据最高子视图按钮自动调整超级视图高度
Posted
技术标签:
【中文标题】根据最高子视图按钮自动调整超级视图高度【英文标题】:Autosizing superview height according to tallest subview button 【发布时间】:2019-06-06 06:59:10 【问题描述】:我有以下布局。黄色视图是一个buttonsContainerView
,它充当它所拥有的 3 个等宽按钮的容器。所有三个按钮都是黄色buttonsContainerView
的子视图。我给出的所有约束在屏幕截图中都是基本的、可见的和可以理解的,但我仍然会在下面解释它们。
buttonsContainerView
- (黄色视图)固定到 viewController
的 view
的 safeArea
顶部,并插入 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的所有按钮添加更大或相等的顶部插入。
主要思想是按钮垂直插入的低优先级约束,自动布局引擎将尝试满足它,但更大或相等的顶部插入将阻止对小按钮执行此操作。
【讨论】:
以上是关于根据最高子视图按钮自动调整超级视图高度的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 AutoLayout 根据父高度调整子视图高度而不添加/删除约束