我在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/

10-14 11:48