Objective-c: UIStackView 的动态大小,取决于它的内容
Objective-c: Dynamic size of UIStackView, depending of it's content
我有一个位于滚动视图中的 UIStackView。 stackView 的内容是动态的,具体取决于使用方法 "addArrangedSubview" 创建和添加的视图数量。如果我有几个子视图,它们之间会有很大的间距,如果我有太多视图,它们就会被压缩。
我有:
_viewController
|__ 观看次数
|____scrollView
|______stackView(动态内容)
我将堆栈视图设置为:
- 对齐方式:填充
- 分布:等间距
- 间距:5
当然还有约束 top/bottom/leading/trailing
我想在每次添加视图时增加 UIStackview 的大小,并保持我添加的子视图的大小。
也许缺少某些东西或者我理解不好..有人可以向我解释如何去做吗?
我正在与 objective-c
合作
我有关于此主题的详细 [=23=]。您可以在那里查看分步指南。但我也在这里添加一个简短的解释:
您应该为滚动视图设置所有必要的约束到它的超级视图。然后是您的堆栈视图,它是此滚动视图的子视图。您可能已将此堆栈视图的所有四个边缘也固定到滚动视图。但真正的问题来了。
UIScrollView
与其他视图不同。它有一个 contentView
。此内容视图负责滚动行为。如果不适合滚动视图框架的内容多于启用滚动。
因此,为了正确设置内容视图,滚动视图必须知道内容视图的大小,以便知道何时停止滚动。这里的大小表示实际 width
和 height
。但是这个大小不能从约束的设置中确定,因为它们是由自动布局引擎动态计算的。
在您的例子中,堆栈视图充当滚动视图的内容视图。您可能已将堆栈视图的所有边缘固定到它的超级视图 - UIScrollView
。但这不足以让滚动视图计算内容大小。您还必须提供:
width
& height
- 如果你的滚动视图在两个轴上都是可滚动的
width
- 如果你想垂直滚动并限制水平滚动
height
- 如果你想水平滚动并限制垂直滚动
由于您需要水平滚动,您必须通过提供等于滚动视图的堆栈视图 height
来限制垂直滚动(它并不总是需要与滚动视图的高度相同) ,但应该通过其他方式覆盖滚动视图的整个高度)。你还需要一个占位符 x-axis 约束来使 Interface Builder
快乐。内容视图的实际 width
将被添加到堆栈视图的子视图覆盖。
重要提示:您应该在堆栈视图中添加一个 Horizontally in Container 约束,并使其成为将在以下位置删除的占位符构建时间。您可以通过在文档大纲中选择约束并打开 大小检查器 来完成此操作,您将在其中获得一个 Remove at build time
复选框。您选中该框,就可以开始了。
我有一个位于滚动视图中的 UIStackView。 stackView 的内容是动态的,具体取决于使用方法 "addArrangedSubview" 创建和添加的视图数量。如果我有几个子视图,它们之间会有很大的间距,如果我有太多视图,它们就会被压缩。
我有:
_viewController
|__ 观看次数
|____scrollView
|______stackView(动态内容)
我将堆栈视图设置为:
- 对齐方式:填充
- 分布:等间距
- 间距:5 当然还有约束 top/bottom/leading/trailing
我想在每次添加视图时增加 UIStackview 的大小,并保持我添加的子视图的大小。 也许缺少某些东西或者我理解不好..有人可以向我解释如何去做吗?
我正在与 objective-c
合作我有关于此主题的详细 [=23=]。您可以在那里查看分步指南。但我也在这里添加一个简短的解释:
您应该为滚动视图设置所有必要的约束到它的超级视图。然后是您的堆栈视图,它是此滚动视图的子视图。您可能已将此堆栈视图的所有四个边缘也固定到滚动视图。但真正的问题来了。
UIScrollView
与其他视图不同。它有一个 contentView
。此内容视图负责滚动行为。如果不适合滚动视图框架的内容多于启用滚动。
因此,为了正确设置内容视图,滚动视图必须知道内容视图的大小,以便知道何时停止滚动。这里的大小表示实际 width
和 height
。但是这个大小不能从约束的设置中确定,因为它们是由自动布局引擎动态计算的。
在您的例子中,堆栈视图充当滚动视图的内容视图。您可能已将堆栈视图的所有边缘固定到它的超级视图 - UIScrollView
。但这不足以让滚动视图计算内容大小。您还必须提供:
width
&height
- 如果你的滚动视图在两个轴上都是可滚动的width
- 如果你想垂直滚动并限制水平滚动height
- 如果你想水平滚动并限制垂直滚动
由于您需要水平滚动,您必须通过提供等于滚动视图的堆栈视图 height
来限制垂直滚动(它并不总是需要与滚动视图的高度相同) ,但应该通过其他方式覆盖滚动视图的整个高度)。你还需要一个占位符 x-axis 约束来使 Interface Builder
快乐。内容视图的实际 width
将被添加到堆栈视图的子视图覆盖。
重要提示:您应该在堆栈视图中添加一个 Horizontally in Container 约束,并使其成为将在以下位置删除的占位符构建时间。您可以通过在文档大纲中选择约束并打开 大小检查器 来完成此操作,您将在其中获得一个 Remove at build time
复选框。您选中该框,就可以开始了。