【问题标题】:When should AutoLayout Constraints Be Created While Using the UIViewControllerTransitioning Protocol使用 UIViewControllerTransitioning 协议时应该何时创建 AutoLayout 约束
【发布时间】:2017-12-14 06:20:27
【问题描述】:

我正在尝试创建一个custom container view controller。我想使用标准ViewControllerTransitioning pattern 来动画添加子视图,但我有点卡住了。我完全用代码编写了这个容器视图控制器,因为子视图控制器的数量可能会有所不同。

我已经看过this tutorial,它对我帮助很大,但我无法弄清楚这一步。

添加新的子视图控制器的流程目前是这样的:

'MyContainerVc'.addNewSubViewController
  Call UIViewController.addChildViewController
  Create transitioning context
  Fetch animator
  Animate
    'Container View'.addSubview
       Create autolayout positioning/height constraints

定位/高度约束可以在容器视图中创建(并且是),因为容器视图控制器不需要控制它们,但是宽度约束需要在容器视图控制器中创建,作为子vcs可以为我的容器 vc 指定一个preferredContentSize.width。容器 vc 会尽量尊重子 vcs 的偏好,并尽可能将宽度约束建立在它的基础之上。

我不确定何时可以创建子视图宽度的约束。在执行动画之前需要强制执行约束,因为应在子视图出现之前定义宽度。但是,在将子视图添加为子视图之前我无法激活它,如果我在动画完成后激活它,则在动画期间没有正确定义宽度。

动画师应该只使用容器视图的transitioningContextaddSubview 方法,因为它应该不知道它正在制作什么样的过渡动画。

另外,在 addSubview 中创建 AutoLayout 约束是最好的方法,或者应该在其他地方完成,例如在didAddSubview?

非常感谢一些建议!

【问题讨论】:

    标签: ios animation uiviewcontroller autolayout uicontainerview


    【解决方案1】:

    我想我明白了。我将创建一个委托协议,该协议指定一个告诉容器视图控制器创建宽度约束的函数,我将在容器视图的addSubview 中调用该方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-30
      • 2014-09-19
      • 2014-10-27
      • 1970-01-01
      • 1970-01-01
      • 2016-02-18
      相关资源
      最近更新 更多