在 UIStackView 中以编程方式添加内容时的 UIScrollView 高度

Posted

技术标签:

【中文标题】在 UIStackView 中以编程方式添加内容时的 UIScrollView 高度【英文标题】:UIScrollView height while adding content programmatically in UIStackView 【发布时间】:2017-10-11 22:10:56 【问题描述】:

我正在尝试创建一个包含UIScrollView 的视图。这个UIScrollView 包含 3 个UIViews。最后一个包含另一个 UIStackView 我想在运行时填写。

这里是故事板的图像:

但是当我在运行时在第二个UIStackView 中添加内容时,ScrollView 的高度保持不变。

第二个UIStackView 定义为第一个:

轴:垂直 对齐:填充 分布:等间距

然后我使用:

mStackView.addArrangedSubview(matProgress)

结果如下:

让底部视图和 ScrollView 拉伸以适应内容的方式是什么。

【问题讨论】:

你最初是用 empty 底视图显示这个吗?或者当它第一次显示时它有 一些 多行? 当它第一次显示时,它已经有了一些视图。我在接受的答案中的评论中描述了我遇到的问题 【参考方案1】:

如果您有 UIScrollView 和具有自动布局的子视图。以编程方式设置滚动视图的高度将拉伸内部视图以符合自动布局。

因此,您通过代码获取第三个视图的高度并将 UIScrollView 高度设置为 view1.height + view2.height + expectedThirdViewHeight。

【讨论】:

【参考方案2】:

布局可以通过自动布局和约束来完成。

重点是:

在任一 StackView 上设置高度限制 将“主”StackView Distribution 设置为 Equal Spacing 将“Main”StackView 的前导、尾随、顶部和底部约束设置为其 Superview(即 ScrollView) 你还需要在“Main”StackView上设置一个宽度约束来控制水平contentSize

唯一的怪癖是在启动时。如果您在底部/内部 StackView 中没有内容,它仍将“存在”在 Main StackView 中并占用空间。有一个技巧可以解决这个问题,但必须在代码中完成。

您可以在此处查看一个工作示例:https://github.com/DonMag/StackyScrolly

【讨论】:

感谢 DonMag,您提供的示例帮助我使其工作。当我像您一样使用UILabels 时,我的项目与您的项目完全一样。所以问题是我在底部UIStackView 添加的视图没有任何高度限制...

以上是关于在 UIStackView 中以编程方式添加内容时的 UIScrollView 高度的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式在 IOS 的 UIStackView 中重新排序项目?

当 iAd 横幅出现时,如何将视图的内容上移? (在 Swift 中以编程方式)

以编程方式清空 UIStackView

以编程方式未添加到 UIStackView 的元素?

在 Swift 中以编程方式添加时,UIScrollView 根本不滚动?

以编程方式在 UIStackView 中添加视图