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

Objective-c: Dynamic size of UIStackView, depending of it's content

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

我有:

_viewController

|__ 观看次数

|____scrollView

|______stackView(动态内容)

我将堆栈视图设置为:

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

我正在与 objective-c

合作

我有关于此主题的详细 [​​=23=]。您可以在那里查看分步指南。但我也在这里添加一个简短的解释:

您应该为滚动视图设置所有必要的约束到它的超级视图。然后是您的堆栈视图,它是此滚动视图的子视图。您可能已将此堆栈视图的所有四个边缘也固定到滚动视图。但真正的问题来了。

UIScrollView 与其他视图不同。它有一个 contentView。此内容视图负责滚动行为。如果不适合滚动视图框架的内容多于启用滚动。

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

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

  • width & height - 如果你的滚动视图在两个轴上都是可滚动的
  • width - 如果你想垂直滚动并限制水平滚动
  • height - 如果你想水平滚动并限制垂直滚动

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

重要提示:您应该在堆栈视图中添加一个 Horizo​​ntally in Container 约束,并使其成为将在以下位置删除的占位符构建时间。您可以通过在文档大纲中选择约束并打开 大小检查器 来完成此操作,您将在其中获得一个 Remove at build time 复选框。您选中该框,就可以开始了。