我有一个UIStackView,它位于scrollview中。 stackView的内容是动态的,具体取决于使用methode" addArrangedSubview"创建和添加的视图数量。如果我有一些子视图,它们之间的间距太大,如果我有太多的视图,它们就会被压缩。
我有:
_viewController
| __ view
| ____滚动视图
| ______ stackView(动态内容)
我将stackview设置为:
我想在每次添加视图时增加UIStackview的大小,并保持我添加的子视图的大小。 也许有些东西缺失或我理解不好......有人可以向我解释如何去做吗?
我正在使用objective-c
答案 0 :(得分:1)
我在这个主题上有详细的Medium post。您可以在那里查看分步指南。但我也在这里添加了一个简短的解释:
您应该为滚动视图设置所有必要的约束条件,以获得它的超级视图。然后是堆栈视图,它是此滚动视图的子视图。您可能已将此堆栈视图的所有四个边都固定到滚动视图。但实际上是关注的问题。
UIScrollView
与其他观点一样不起作用。它有一个contentView
。此内容视图负责滚动行为。如果滚动视图的框架中有更多内容不适合启用滚动。
因此,要正确设置内容视图,滚动视图必须知道内容视图的大小,以便知道何时停止滚动。此处大小表示实际的width
和{ {1}}。但是这个大小不能从约束的设置中确定,因为它们是由自动布局引擎动态计算的。
在您的情况下,堆栈视图充当滚动视图的内容视图。您可能已将堆栈视图的所有边缘固定到它的超级视图 - height
。但这不足以让滚动视图计算内容大小。您还必须提供:
UIScrollView
& width
- 如果您的滚动视图可在两个轴上滚动height
- 如果要垂直滚动并限制水平滚动width
- 如果要水平滚动并限制垂直滚动当您需要水平滚动时,您必须通过提供等于滚动视图的堆栈视图的height
来限制垂直滚动(它不需要与滚动视图的高度相同) ,但 应通过其他方式覆盖滚动视图的整个高度 。您还需要一个占位符 x轴约束来使height
满意。内容视图的实际Interface Builder
将被添加到堆栈视图的子视图覆盖。
重要提示:您应该在堆栈视图中添加水平在容器约束中,并将其作为将在构建时删除的占位符。您可以通过选择文档大纲中的约束并打开大小检查器来执行此操作,您将在其中获得width
复选框。你检查那个方框,准备好了。