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

19

我正在准备一个类似于屏幕截图所示的自定义视图。我在运行时添加所有用户界面组件(标签、文本字段、单选按钮等)。为了定位这些元素,我使用Autolayout 约束。到目前为止,这部分工作正常。

Custom View

元素的数量因上下文而异。我想知道如何使用Autolayout约束来动态调整父视图的大小(很可能是视图的高度)。因此,视图约束应考虑当前附加子视图的高度和边距。

2个回答

27

我使用以下设置完成了此操作:

  • 容器视图没有高度约束
  • 顶部子视图与容器视图之间有间距约束
  • 包含的视图之间都有间距约束
  • 底部视图与容器视图之间有间距约束

自动布局系统通过调整容器大小来满足这些约束以适应其内容。

当然,在更改内容时需要动态设置约束。


你会等待哪个事件来知道布局管理器已经完成了它的工作,即放大或缩小容器视图? - JJD
我正在使用AutoLayout作为一个更大组合的一部分,该组合本身不使用Autolayout。因此,当布局管理器完成其工作时,我需要重新排列组合部分。 - JJD
2
我想要1)感谢您的回答,并且2)强调2和4的重要性。我一直在苦恼,因为我的子视图(UIButton)显示出来了,但是不能点击。原来父视图没有尺寸(也就是0x0),因为缺少到父视图的间距约束。 - Scott Berrevoets
你应该在需要调整大小的视图中包含 TranslatesAutoresizingMaskIntoConstraints = false - N_A
@ScottBerrevoets 我也遇到了同样的问题... 按钮可以看到但是无法触摸。我花了一整天的时间才解决了这个问题。 - MK Yung
显示剩余2条评论

2
如果您使用的是NSStackView,请确保不为其高度和宽度设置约束,并确保所有边都已固定。

enter image description here

还要确保将内容Hugging属性设置为1000。

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接