在 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 上设置高度限制 将“主”StackViewDistribution
设置为 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 中以编程方式)