我可以通过设置modalPresentationStyle = UIModalPresentationCurrentContext
我的 UIWindow 的 rootViewController 来实现这一点,如果我没有在这个 rootViewController 之上呈现任何新的全屏 viewControllers。我做了这样的事情:
UIViewController *rootViewController = [UIApplication sharedApplication].delegate.window.rootViewController;
rootViewController.modalPresentationStyle = UIModalPresentationCurrentContext;
[self presentViewController:vc animated:YES completion:nil];
我已经尝试使用 UINavigationController 作为我的窗口的 rootViewController 和各种其他自定义视图控制器。似乎只要窗口的 rootViewController 知道发生了什么,任何子视图控制器都可以调用presentViewController:animated:completion:
而不会使底层视图变黑。
但是,假设您在窗口的 rootViewController 之上展示了另一个 viewController。并且这个新的 viewController 被呈现modalPresentationStyle = UIModalPresentationFullScreen
(即占据屏幕),然后你必须调用modalPresentationStyle = UIModalPresentationCurrentContext
最顶层的 viewController。
回顾一下:
- 如果您有 UINavigationController -> UIViewController(s)(它们可以被推入和弹出),那么您
modalPresentationStyle = UIModalPresentationCurrentContext
在 UINavigationController 上进行设置。
- 如果你有 UINavigationController -> UIViewController -> new-UIViewController(modalPresentationStyle 设置为 UIModalPresentationFullScreen),那么你
modalPresentationStyle = UIModalPresentationCurrentContext
在 new-UIViewController 上进行设置。
希望这也适用于你们!