Ios 通过UIActivityViewController更改MFMailComposeViewController中的状态栏颜色
我正在尝试更改导航栏按钮的颜色、导航栏的色调和文本颜色,但我似乎没有取得任何进展。Ios 通过UIActivityViewController更改MFMailComposeViewController中的状态栏颜色,ios,swift,uinavigationbar,mfmailcomposeviewcontroller,uiactivityviewcontroller,Ios,Swift,Uinavigationbar,Mfmailcomposeviewcontroller,Uiactivityviewcontroller,我正在尝试更改导航栏按钮的颜色、导航栏的色调和文本颜色,但我似乎没有取得任何进展。MFMailComposeViewController是通过UIActivityViewController激活的,我尝试了一些以前行之有效的方法(但不是通过UIActivityViewController) 这是我当前的代码: UINavigationBar.my_appearanceWhenContainedIn(MFMailComposeViewController).barTintColor = U
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)
})
转到应用程序代理文件,将以下行添加到didFinishLaunchingWithOptions:)它将更新所有视图控制器的状态栏颜色
UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent
此外,在info.plist文件中添加一个名为“查看基于控制器的状态栏外观”的新键,并将该值设置为“否”
更新
要设置视图之间的不同样式,请尝试以下操作:
override func preferredStatusBarStyle() -> UIStatusBarStyle {
return UIStatusBarStyle.LightContent
}
然后,您可以根据您试图实现的目标返回亮或暗:)
MFMailComposeViewController
设置您无权访问的自己的状态栏样式。你也许可以挖掘一些私人API来实现这一点,但你的应用肯定会被苹果拒绝
不过,作为补充说明,您不应该对苹果提供的UIViewController进行任何更改。它们之所以看起来如此,是因为它们是按照原始应用程序设计的。这意味着在应用程序中给用户一种位置感和方向感。苹果可能也会拒绝你的应用,因为你已经更改了他们的内容。对于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];
您可以将
MFMailViewController
子类化,并覆盖其viewwillbeen
方法
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
在应用程序中完成加载。这将为您的整个应用程序设置lightContent。我有这个,但我需要视图控制器之间的状态栏样式不同。虽然可能是这样,我已经批准了许多其他应用程序,它们可以做完全相同的事情,因此我不太担心它被拒绝。如果它解决了您的问题,您能将此标记为正确答案吗?