我UIViewController
在另一个UIViewController
视图之上有一个视图作为子视图/模态,例如,子视图/模态应该是透明的,添加到子视图中的任何组件都应该是可见的。问题是我有子视图显示黑色背景,而不是clearColor。我试图将其UIView
作为clearColor而不是黑色背景。有人知道这是怎么回事吗?任何建议表示赞赏。
FirstViewController.m
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"SecondViewController"];
[vc setModalPresentationStyle:UIModalPresentationFullScreen];
[self presentModalViewController:vc animated:NO];
SecondViewController.m
- (void)viewDidLoad
{
[super viewDidLoad];
self.view.opaque = YES;
self.view.backgroundColor = [UIColor clearColor];
}
解决:我已解决问题。它对于iPhone和iPad都运行良好。没有黑色背景的模态视图控制器只是clearColor / transparent。我唯一需要更改的是替换UIModalPresentationFullScreen
为UIModalPresentationCurrentContext
。多么简单!
FirstViewController.m
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"SecondViewController"];
vc.view.backgroundColor = [UIColor clearColor];
self.modalPresentationStyle = UIModalPresentationCurrentContext;
[self presentViewController:vc animated:NO completion:nil];
注意:如果您使用的modalPresentationStyle
属性navigationController
:
FirstViewController.m
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"SecondViewController"];
vc.view.backgroundColor = [UIColor clearColor];
self.navigationController.modalPresentationStyle = UIModalPresentationCurrentContext;
[self presentViewController:vc animated:NO completion:nil];
注意:坏消息是上述解决方案在iOS 7上不起作用。好消息是我已修复iOS7的问题!我向某人求助,他说的是:
当以模态方式呈现视图控制器时,iOS在呈现期间将其下方的视图控制器从视图层次结构中移除。尽管以模态形式显示的视图控制器的视图是透明的,但在其下方除了黑色的应用程序窗口外没有其他任何东西。iOS 7引入了一种新的模式表示样式,UIModalPresentationCustom
该样式使iOS不会删除所显示的视图控制器下方的视图。但是,为了使用这种模式表示样式,必须提供自己的过渡委托来处理表示并关闭动画。WWDC 2013 https://developer.apple.com/wwdc/videos/?id=218的“使用视图控制器的自定义过渡”演讲中对此进行了概述,该演讲还介绍了如何实现自己的过渡委托。
您可能会在iOS7中看到我针对上述问题的解决方案:https : //github.com/hightech/iOS-7-Custom-ModalViewController-Transitions
modalViewController.modalPresentationStyle = UIModalPresentationOverCurrentContext;
将解决问题,