我有一个包含多个视图的故事板场景,包括一个带有自己的视图控制器的容器视图。场景的主视图希望能够在其所有内容上垂直滚动,但所有内容的大小(包括滚动视图的内容窗格)都需要由AutoLayout设置。我一直试图按照其他几个问题给出解释。在苹果文档中,但似乎有一个特定于我正在尝试做的事情:
容器视图有一个项目列表,每个项目都显示在一个方框中。这些帧在每行中平铺五个,根据需要排成多行。这些项目的数量可能随时发生变化,因此不知道网格的最终高度。但是,网格的高度取决于容器的宽度,因为必须始终有五个。
因此,明智的约束就是:
container.height = (0.2 * numberOfRows) * containerWidth + 0.0
根据文档,我应该设置这个约束来强制滚动视图的contentSize
以适应所有滚动的东西。
但是,您会注意到,此约束的numberOfRows
组件会动态更改 - 当我使用IBOutlet保存时,这是约束的multiplier
属性的一部分。当我试图使内容获取回调改变乘数时,它会出现编译错误,因为multiplier
是只读的。
如何在仍然使用自动布局的情况下动态更改滚动条子视图的高度?
这张图片希望能够展示我正在尝试做的事情。最后一个容器视图上方的所有内容都与约束正确对齐。最后一个应该有一个正方形网格(未知计数)。通过我以编程方式创建的布局约束正确地给出了正方形的大小。但目前,滚动视图的内容大小固定为滚动视图的大小,而不是扩展为包含高大的拼贴 - 所以不会发生滚动!
答案 0 :(得分:0)
我发现这个问题的原因是我没有正确使用"占位符约束"。基本上,我必须设置所有约束,好像我不会改变代码中的任何帧。但是,在一个与我的程序化框架更改冲突的约束 - 底部容器的高度 - 我必须启用"占位符(在构建之前删除)"在检查器窗格中。我想这允许Interface Builder承担在运行时提供高度维度的承诺。
这样做的一个警告是,在我手动设置之前,现在不受限制的高度是不可预测的。所以我必须在viewDidLoad
中设置默认的初始高度。
从我所知道的,这将是正确的方式来做这样的事情,直到像#34;仅加载限制"已创建 - 影响初始加载位置的约束,但不再限制框架的布局。不过,不知道这是否会发生,甚至可能。