我有一个简单的控制器,显示另一个具有自定义转换的控制器。我使用实心导航栏:
self.navigationController.navigationBar.barStyle = UIBarStyleBlack;
self.navigationController.navigationBar.barTintColor = [UIColor purpleColor];
self.navigationController.navigationBar.tintColor = [UIColor whiteColor];
这是第二个控制器:
当我在子控制器中打开MFMailComposeViewController
时,状态栏为白色白色(此处还附加UIActivityViewController
):
事实证明,这与将modalPresentationStyle
设置为UIModalPresentationCustom
:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
UIViewController *controller = (UIViewController*)segue.destinationViewController;
// this line cause the bug
//controller.modalPresentationStyle = UIModalPresentationCustom;
controller.transitioningDelegate = self;
}
如果controller.modalPresentationStyle
保持不变,状态栏颜色是正确的。此外,此属性似乎不会干扰自定义转换。
我在这里遗漏了什么?为什么modalPresentationStyle
会影响系统控制器中的状态栏类型?这可能是个错误吗?
答案 0 :(得分:15)
也许你可以尝试添加:
controller.modalPresentationCapturesStatusBarAppearance = YES
设置modalPresentationStyle
后。根据{{3}}:
当您通过调用presentViewController:animated:completion:方法呈现视图控制器时,仅当呈现的控制器的modalPresentationStyle值为UIModalPresentationFullScreen时,状态栏外观控件才从呈现传送到呈现的视图控制器。通过将此属性设置为YES,即使呈现非全屏,也可以指定显示的视图控制器控件状态栏外观。