UIStackView和填充分配-不遵守内容拥抱优先级

时间:2018-06-21 21:22:00

标签: ios swift uistackview

我有一个ViewController,它的UIStackView与其父容器对齐,并带有一些边距(前导,尾随,顶部空间,底部)和垂直轴。 UIStackView设置为对齐“填充”和分布“相等间距”。在UIStackView内,我有三个UIScrollViews作为子级。每个UIScrollView都有一个内部包含一些控件的UIView。

如果我将IB中的UIStackView设置为“填充”分发,并且将第二个UIScrollView的“内容拥抱优先级”设置为200,并且将第一个和第三个UIScrollView的默认值设置为250,我会看到第二个UIScrollView可以正确拉伸按照预期和期望填充空白空间。

但是,我想将IB中的UIStackView设置为默认情况下的“等间距”分布,并且在代码中,当用户点击其中一个UIScrollViews时,我希望所点击的UIScrollView能够扩展并填充其余空间。因此,我在点击UIScrollView时添加了以下代码(以将点击的UIScrollView的CHP设置为低于其同行的值):

scrollViewToExpand.setContentHuggingPriority(UILayoutPriority(rawValue: 200), for: .vertical)
stackView.distribution = .fill

但是,第一个UIScrollView总是会被拉伸,而第二个和第三个UIScrollView都不会被拉伸。

每个UIScrollView的每个后代UIView均设置为尾随/前导/底部/顶部匹配的SuperView且宽度相等。

我在做什么错?

1 个答案:

答案 0 :(得分:1)

我终于明白了。首先,似乎我不得不将CHP设置在UIScrollView上而不是在可以扩展/收缩的孩子上。

此外,我必须更改在每个UIScrollView的嵌入式UIView上设置的约束,该约束将高度定义为> = 60,在折叠时等于60,在不折叠时再次返回。

最后,如果不存在可扩展/收缩的子元素,则根本不会发生扩展/收缩。仅在UIScrollView中拥有一个UIView是不够的。