我试图改变导航栏按钮的颜色,导航栏色调颜色和文本颜色,但我似乎没有得到任何地方。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来做到这一点,但这样你的应用肯定会被苹果拒绝。