这就是我想要做的......
我有一个视图控制器需要根据某些数据的存在动态显示不同的子视图。
这是一个简单的模型。 每个彩色块代表一个独特的子视图。
有时绿色区块需要位于顶部,有时绿色区块根本不会显示,有时淡蓝色区块会有所不同,等等。
每个子视图都有交互元素,所以我一直在创建和添加它们:
addChildViewController
和didMoveToParentViewController
addSubview
myNewViewController.view
我想转换到UIStackView
,因为它似乎是这个视图的一个很好的支持系统,因为我需要做的就是堆叠它的子视图。在尝试添加具有内部自动布局约束的子视图时,我发现许多冲突的约束错误和意外的视图帧。
问题
我是否通过在一个视图控制器的视图中嵌入4-6个视图控制器的视图来使自己失败?
另外,如何在不看到UIStackView
的许多中断约束的情况下,为最小高度或内容大小添加添加的视图属性? (所以他们可以堆叠,但其中一个是400高,另一个是200高)
答案 0 :(得分:5)
你绝对可以使用UIContainerViews
结合UIStackViews
和UIScrollViews
这样做,这是一个复杂的设置,所以这里是一个让你入门的首发项目:
https://github.com/Rnorback/ScrollingStackView
这是该项目的样子:
您希望容器具有不同的大小。为此,只需使用Autolayout为容器添加高度约束。如果要更改滚动的高度。然后,您需要更改UIStackView
的高度限制。
创建此设置时,您必须确保UIStackView
distribution
设置保持填充状态。这样你就可以在UIContainerViews上设置高度限制。
在UIScrollView
中设置任何内容时,您必须确保将对象固定到滚动视图的边缘并具有已定义的宽度和高度,否则scrollview将抛出一个constriant错误。我认为它就像滚动视图试图压入内容视图的所有方面,如果任何一方给出,则scrollview无法正确呈现它。
希望这有帮助。