通过UIActivityViewController改变MFMailComposeViewController的状态栏颜



我试图改变导航栏按钮的颜色,导航栏色调颜色和文本颜色,但我似乎没有得到任何地方。MFMailComposeViewController是通过UIActivityViewController激活的,我已经尝试了几种不同的方法,这些方法以前已经工作过(虽然不是通过UIActivityViewController)。

这是我当前的代码:

    UINavigationBar.my_appearanceWhenContainedIn(MFMailComposeViewController).barTintColor = UIColor.blackColor()

这是这里建议的。我也试过这个:

    activityVC.navigationController?.navigationBar.tintColor = UIColorFromRGB(0x0096FF)
    activityVC.navigationController?.navigationBar.barTintColor = UIColor.whiteColor()

我也想改变状态栏的颜色。

有人有什么想法吗?

更新:

我修复了按钮和标题的导航栏问题,但仍在寻找状态栏的解决方案。这样做不起作用:

    self.presentViewController(activityVC, animated: true, completion: { () in
        UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: true)
    })

您可以子类化MFMailViewController并覆盖其viewWillAppear方法

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent
    self.navigationController.navigationBar.translucent = false
    self.navigationController.navigationBar.opaque = false
    self.navigationController.navigationBar.barTintColor = UIColor.blueColor()
}

因为你只希望状态栏是lightcontent当MFMailComposeViewController是活动的,你不应该把

UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent

委托didFinishLoading。这将为整个应用程序设置lightContent

在iOS8中你使用barTintColor来改变状态的颜色

    NSString *invitationText = @"test";
   [UINavigationBar appearance].barTintColor = [UIColor whiteColor];
   MFMailComposeViewController *mc = [[MFMailComposeViewController alloc] init];
   mc.mailComposeDelegate = self;
   [mc setSubject:@"Test "];
   [mc setMessageBody:invitationText isHTML:YES];
   [self presentViewController:mc animated:YES completion:NULL];

转到你的应用程序委托文件,并将这些行添加到你的didFinishLaunchingWithOptions:)它将更新所有视图控制器的状态栏颜色。

UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent

另外在你的信息。plist文件添加一个名为"基于控制器的状态栏外观"的新键,并将值设置为"NO"

在视图之间设置不同的样式:

override func preferredStatusBarStyle() -> UIStatusBarStyle {
return UIStatusBarStyle.LightContent
}

然后你可以根据你想要达到的效果返回浅色或深色:)

MFMailComposeViewController设置自己的状态栏样式,您无法访问。你也许可以挖掘一些私有api来做到这一点,但这样你的应用肯定会被苹果拒绝。

作为旁注,你不应该改变任何关于苹果提供的UIViewController(s)。它们看起来是这样的,因为它们是按照原始应用的样式设计的。这是为了给用户一种应用中的位置和方向感。苹果也可能会拒绝你的应用,因为你改变了他们的东西。

最新更新