繁体   English   中英

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

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

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

我有:

_viewController

|__ 视图

|____滚动视图

|______stackView(动态内容)

我将堆栈视图设置为:

  • 对齐方式:填充
  • 分布:等间距
  • 间距:5,当然还有顶部/底部/前导/尾随的约束

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

我正在使用objective-c

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

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

UIScrollView不像其他视图那样工作。 它有一个contentView 此内容视图负责滚动行为。 如果滚动视图框架中容纳不下的内容多于启用滚动。

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

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

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

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

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

使约束成为占位符

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM