将modalPresentationStyle设置为自定义会导致MFMailComposeViewController中的状态栏颜色错误

时间:2014-06-25 10:32:12

标签: ios objective-c uiviewcontroller

我有一个简单的控制器,显示另一个具有自定义转换的控制器。我使用实心导航栏:

self.navigationController.navigationBar.barStyle = UIBarStyleBlack;
self.navigationController.navigationBar.barTintColor = [UIColor purpleColor];
self.navigationController.navigationBar.tintColor = [UIColor whiteColor];

这是第二个控制器: enter image description here

当我在子控制器中打开MFMailComposeViewController时,状态栏为白色白色(此处还附加UIActivityViewController): enter image description here

事实证明,这与将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会影响系统控制器中的状态栏类型?这可能是个错误吗?

完整代码在这里https://github.com/mbigatti/StatusBarTest

1 个答案:

答案 0 :(得分:15)

也许你可以尝试添加:

controller.modalPresentationCapturesStatusBarAppearance = YES
设置modalPresentationStyle

。根据{{​​3}}:

  

当您通过调用presentViewController:animated:completion:方法呈现视图控制器时,仅当呈现的控制器的modalPresentationStyle值为UIModalPresentationFullScreen时,状态栏外观控件才从呈现传送到呈现的视图控制器。通过将此属性设置为YES,即使呈现非全屏,也可以指定显示的视图控制器控件状态栏外观。