我在appDelegate中使用以下代码来设置整个应用程序中UINavigationBar和状态栏的外观:
[[UINavigationBar appearance] setTintColor:[UIColor whiteColor]];
[[UINavigationBar appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName: [UIColor whiteColor]}];
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
这段代码正确地将所有内容的外观设置为白色,除非禁止第三方模式viewController,例如从Dropbox API或UIActivityViewController的Mail/Message viewController。我提供了一些屏幕截图,以显示它们的外观。
UIActivityViewController邮件:
UIActivityViewController消息:
Dropbox API:
我试着把它放进去
[[UINavigationBar appearanceWhenContainedIn:[MFMailComposeViewController class], nil] setTitleTextAttributes:@{NSForegroundColorAttributeName: [UIColor whiteColor]}];
也
[[UINavigationBar appearanceWhenContainedIn:[UIActivityViewController class], nil] setTintColor:[UIColor whiteColor]];
而且没有人在工作。
最佳答案
像您一样,我一直在尝试更改UIActivityViewController及其“子” Controller 的外观。在iOS7中,外观API似乎有问题。 UIActivityViewController可能是一个不同的过程,并且肯定是一个单独的窗口,因此,对它进行样式设置很麻烦,我并不感到惊讶。
无论如何,我找到了解决此问题的有趣方法,但您的设计师可能不喜欢它。创建UIWindow的子类(例如:MyWindow),将其实例化为主窗口,并且每次使用外观API时都应使用它,如下所示:
[UINavigationBar appearanceWhenContainedIn:[MyWindow class], nil].barTintColor = [UIColor redColor];
这样,您将仅对实际上属于您的应用程序的 View 进行样式设置,而Apple提供的 View 将保持白色/蓝色。我想这不是您想要的解决方案,但另一方面,它可以使用户很好地了解您的应用程序和系统提供的内容;)
关于ios - UINavigationBar在模态未设置时的外观,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21104666/