我正在使用xcode6 / iOS8更新我们的应用程序。
我遇到的一个问题是当出现模态视图时。基础子视图已删除。它完全被涂黑了..直到模态视图被解除..然后它重新出现。
iOS8有没有遇到过这种情况?自iOS4以来,相同的代码已经有效。
代码:
PigDetailViewController *pigDetailViewController = [[PigDetailViewController alloc] initWithNibName:@"PigDetailViewController" bundle:nil];
self.navigationController.modalPresentationStyle = UIModalPresentationCurrentContext;
self.navigationController.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
[self presentViewController:pigDetailViewController animated:YES completion:nil];
答案 0 :(得分:3)
在iOS 8中,他们添加了一种新的演示风格,其行为类似于您所描述的环境中的UIModalPresentationCurrentContext,它是UIModalPresentationOverCurrentContext。这里的问题是与UIModalPresentationCurrentContext不同,您希望使用此演示文稿样式将视图控制器设置为PRESENTED,如下所示:
PigDetailViewController *pigDetailViewController = [[PigDetailViewController alloc] initWithNibName:@"PigDetailViewController" bundle:nil];
pigDetailViewController.modalPresentationStyle = UIModalPresentationOverCurrentContext;
self.navigationController.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
[self presentViewController:pigDetailViewController animated:YES completion:nil];
请注意,要支持iOS 7及更低版本,您可能需要检查操作系统版本,并根据该版本决定如何呈现视图控制器。
编辑:我想再补充一点。在带有UIModalPresentationCurrentContext的iOS7中,当呈现的VC被解除时,底层VC的viewDidAppear方法被调用。在带有UIModalPresentationOverCurrentContext的iOS8中,我发现当底层的VC被解除时,底层VC没有调用它的viewDidAppear方法。
答案 1 :(得分:0)
在BrennanR的回答中添加一个观点..甚至viewWillAppear也不会在VC顶部的VC被解雇时调用。
答案 2 :(得分:-1)
我认为您误解了模式视图控制器的工作原理。
当您以模态方式呈现视图控制器时,它将控制整个屏幕。它有一个不透明的背景(通常是黑色),然后在其上面绘制视图。
因此,如果将view.backgroundColor
设置为黄色(例如),它将具有黄色背景。如果将其设置为清除,则它将显示为黑色背景。
我认为你想要的是另一个视图“透视”,所以看起来模态视图就在它上面。
我发现这样做的最好方法是使用这种方法......
// in the view controller that is presenting the modal VC
modalVC = // the modal VC that you will be presenting
UIView *snapshotView = [self.view snapshotViewAfterScreenUpdates:NO];
[modalVC.view insertSubView:snapshotView atIndex:0];
// present the modal VC
这将获取当前视图层次结构的“屏幕截图”,然后将该快照放在模态VC中的所有内容之下。
这样,您的黑屏将被前一个视图控制器的屏幕截图所取代。