Container View Controller如何在sizeForChildContentContainer

时间:2017-08-04 01:23:33

标签: ios autolayout uicontainerview

当视图控制器( VC )发生大小变化时(例如,在设备旋转时),我们都知道这个方法被调用:

  

- (无效)viewWillTransitionToSize:(CGSize)大小         withTransitionCoordinator:(ID)协调

size参数是视图控制器在大小更改后的视图的大小。

对于自定义容器视图控制器( ContainerVC )的子视图控制器( ChildVC ),默认情况下由size参数给出该方法是 ContainerVC 的大小。

这一切都有效,直到 ChildVC 的视图小于 ContainerVC 的视图。在这种情况下, ContainerVC 需要实现此方法:

  

- (CGSize)sizeForChildContentContainer:(id)container withParentContainerSize:(CGSize)parentSize

问题:如何在该方法中扣除 ChildVC 视图的大小?

在大小/特征集合甚至发生变化之前,过早地调用该方法 - >调用[self.vc layoutIfNeeded];来更新约束不起作用(约束尚未更新以响应特征变化)。

我当时唯一的线索是方法的parentSize参数,这确实是未来的大小。

我正在努力完成的视觉示例。

  • 绿色:ContainerVC
  • 紫色:ChildVC
  • 蓝色:
  • 之间的约束

iPhone Portrait iPhone Landscape

编辑:我对这个问题的答案仍然非常感兴趣!但是我开始认为这个问题可能无法用AutoLayout解决,需要手工完成。

Edit2:这是Apple描述的事件流。我认为这表明我们需要提前知道ChildViewController的大小。这可能表明这种逻辑可能需要手工完成......

Updating a view controller’s traits and view size

1 个答案:

答案 0 :(得分:0)

我现在相信使用自动布局无法实现这一点。我向 Apple 开了一张支持票,但很遗憾,他们未能给我一个满意的答复。