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关闭动画。
我有一个 UIPresentationController
在主视图上显示固定宽度为 300 的侧边菜单。然后用户可以从侧边菜单打开全屏模式视图。当模态视图被关闭时,菜单视图在关闭动画期间填充屏幕(这是错误的)。在动画结束时调用 containerViewWillLayoutSubviews
并且菜单将其宽度更正为 300。
我确实实现了 frameOfPresentedViewInContainerView
。我还在菜单视图上实现 shouldPresentInFullscreen
返回 NO(尽管这似乎不会影响我真正可以确定的任何内容)。
为什么containerViewWillLayoutSubviews
不是在播放动画之前调用?当菜单视图被覆盖和显示时,我应该如何保持它的宽度?
感谢 riadhluke 指引我前往
我的解决方案在我的菜单 prepareForSegue
UIViewController *destination = [segue destinationViewController];
if (destination.modalPresentationStyle == UIModalPresentationFullScreen) {
destination.modalPresentationStyle = UIModalPresentationOverFullScreen;
}
这会强制全屏模态显示超过全屏,这会导致菜单不会丢失,因此不会重新布局post关闭动画。