通过UIActivityViewController

时间:2015-08-11 19:19:39

标签: ios swift uinavigationbar mfmailcomposeviewcontroller uiactivityviewcontroller

我正在尝试更改导航栏按钮的颜色,导航栏的色调颜色和文本颜色,但我似乎无处可去。 MFMailComposeViewController正在通过UIActivityViewController激活,我尝试了一些以前有效的方法(但不是通过UIActivityViewController)。

这是我目前的代码:

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

建议here。我也试过这个:

    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)
    })

4 个答案:

答案 0 :(得分:4)

您可以继承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()
}

因为当MFMailComposeViewController处于活动状态时,您只希望状态栏为lightcontent,所以不应该放

UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent

进入你的app代表didFinishLoading。这会为整个应用程序设置lightContent。

答案 1 :(得分:1)

对于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];

答案 2 :(得分:0)

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

UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent

此外,在您的info.plist文件中添加一个名为&#34的新密钥;查看基于控制器的状态栏外观"并将值设置为" NO"

<强>更新

要在视图之间设置不同的样式,请尝试:

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

然后根据你想要达到的目的,你可以返回光明或黑暗:)

答案 3 :(得分:-1)

MFMailComposeViewController设置了自己的状态栏样式,您无法访问该样式。你可以深入研究一些私​​有API来做到这一点,但是你的应用肯定会被Apple拒绝。

作为旁注,你不应该改变任何有关Apple提供的UIViewController的内容。他们看起来那样,因为他们在原始应用程序之后进行了样式设置。它旨在为用户提供应用程序中的位置和方向感。 Apple也可能拒绝您的应用,因为您已经更改了他们的内容。