如何准备UIViewController的视图以添加到UIStackView?

sah*_*ziz 2 uiviewcontroller uikit ios autolayout uistackview

这就是我要做的......

我有一个视图控制器,需要根据某些数据的存在动态显示不同的子视图.

这是一个简单的模型.每个彩色块代表一个独特的子视图.

简单的样机

有时绿色块需要位于顶部,有时绿色块根本不会显示,有时浅蓝色块会有所不同,等等.

每个子视图都有交互元素,所以我一直在创建和添加它们,如下所示:

  1. 定义新的视图控制器
  2. 定义它的观点
  3. 打电话addChildViewControllerdidMoveToParentViewController
  4. 调用addSubviewmyNewViewController.view
  5. 使用SnapKit进行自动布局约束以定位视图

我想转换到UIStackView因为它似乎是这个视图的一个很好的支持系统,因为我需要做的就是堆叠它的子视图.在尝试使用自己的内部自动布局约束添加子视图时,我看到许多冲突的约束错误和意外的视图框架.

我是通过在一个视图控制器的视图中嵌入4-6个视图控制器的视图来设置自己的失败吗?

另外,如何在不看到许多破坏限制的情况下,给出添加的视图属性,例如最小高度或内容大小UIStackView?(所以他们可以堆叠,但其中一个是400高,另一个是200高)

Rob*_*ack 5

回答

你可以完全做到这一点使用UIContainerViews联合UIStackViewsUIScrollViews,这是一个复杂的设置所以这里是一个启动项目,让你开始:

https://github.com/Rnorback/ScrollingStackView

这是该项目的样子:

在此输入图像描述

您希望容器具有不同的大小.为此,只需使用Autolayout向容器添加高度约束即可.如果要更改滚动的高度.然后你需要改变的高度约束UIStackView.

简要说明

创建此设置时,您必须确保UIStackView distribution设置保持填充状态.这样你就可以在UIContainerViews上设置高度约束.

在设置任何内容时,UIScrollView您必须确保将对象固定到滚动视图的边缘并具有已定义的宽度和高度,否则scrollview将抛出一个constriant错误.我认为它就像scrollview试图在内容视图的所有方面按下,如果任何一方给出,则scrollview将无法正确显示它.

希望这可以帮助.