UIPresentationController 在显示之前不调用 containerViewWillLayoutSubviews

UIPresentationController not calling containerViewWillLayoutSubviews until after display

我有一个 UIPresentationController 在主视图上显示固定宽度为 300 的侧边菜单。然后用户可以从侧边菜单打开全屏模式视图。当模态视图被关闭时,菜单视图在关闭动画期间填充屏幕(这是错误的)。在动画结束时调用 containerViewWillLayoutSubviews 并且菜单将其宽度更正为 300。

我确实实现了 frameOfPresentedViewInContainerView。我还在菜单视图上实现 shouldPresentInFullscreen 返回 NO(尽管这似乎不会影响我真正可以确定的任何内容)。

为什么containerViewWillLayoutSubviews不是在播放动画之前调用?当菜单视图被覆盖和显示时,我应该如何保持它的宽度?

感谢 riadhluke 指引我前往

我的解决方案在我的菜单 prepareForSegue

UIViewController *destination = [segue destinationViewController];
if (destination.modalPresentationStyle == UIModalPresentationFullScreen) {
    destination.modalPresentationStyle = UIModalPresentationOverFullScreen;
}

这会强制全屏模态显示超过全屏,这会导致菜单不会丢失,因此不会重新布局post关闭动画。