Objective-c:UIStackView的动态大小,取决于他的内容

时间:2018-05-24 14:06:18

标签: ios objective-c uistackview

我有一个UIStackView,它位于scrollview中。 stackView的内容是动态的,具体取决于使用methode" addArrangedSubview"创建和添加的视图数量。如果我有一些子视图,它们之间的间距太大,如果我有太多的视图,它们就会被压缩。

我有:

_viewController

| __ view

| ____滚动视图

| ______ stackView(动态内容)

我将stackview设置为:

  • Alignement:fill
  • 分布:等间距
  • 间距:5 当然还有约束顶部/底部/前导/尾随

我想在每次添加视图时增加UIStackview的大小,并保持我添加的子视图的大小。 也许有些东西缺失或我理解不好......有人可以向我解释如何去做吗?

我正在使用objective-c

1 个答案:

答案 0 :(得分:1)

我在这个主题上有详细的Medium post。您可以在那里查看分步指南。但我也在这里添加了一个简短的解释:

您应该为滚动视图设置所有必要的约束条件,以获得它的超级视图。然后是堆栈视图,它是此滚动视图的子视图。您可能已将此堆栈视图的所有四个边都固定到滚动视图。但实际上是关注的问题。

UIScrollView与其他观点一样不起作用。它有一个contentView。此内容视图负责滚动行为。如果滚动视图的框架中有更多内容不适合启用滚动。

因此,要正确设置内容视图,滚动视图必须知道内容视图的大小,以便知道何时停止滚动。此处大小表示实际的width和{ {1}}。但是这个大小不能从约束的设置中确定,因为它们是由自动布局引擎动态计算的。

在您的情况下,堆栈视图充当滚动视图的内容视图。您可能已将堆栈视图的所有边缘固定到它的超级视图 - height。但这不足以让滚动视图计算内容大小。您还必须提供:

  • UIScrollView& width - 如果您的滚动视图可在两个轴上滚动
  • height - 如果要垂直滚动并限制水平滚动
  • width - 如果要水平滚动并限制垂直滚动

当您需要水平滚动时,您必须通过提供等于滚动视图的堆栈视图的height来限制垂直滚动(它不需要与滚动视图的高度相同) ,但 应通过其他方式覆盖滚动视图的整个高度 。您还需要一个占位符 x轴约束来使height满意。内容视图的实际Interface Builder将被添加到堆栈视图的子视图覆盖。

重要提示:您应该在堆栈视图中添加水平在容器约束中,并将其作为将在构建时删除的占位符。您可以通过选择文档大纲中的约束并打开大小检查器来执行此操作,您将在其中获得width复选框。你检查那个方框,准备好了。

making a constraint to be placeholder