MFMessageComposeViewController外观iOS 7

我有一个外观代理,在UINavigationBar barTintColor属性设置为绿色

[[UINavigationBar appearance] setBarTintColor:[UIColor colorWithRed:54./255 green:165./255 blue:53./255 alpha:1]];

根据需要我重写这个使用appearanceWhenContainedIn:

[[UINavigationBar appearanceWhenContainedIn:[INFSearchViewController class], nil] setBarTintColor:[UIColor colorWithWhite:0.80 alpha:1]];

这工作正常。

但是,当我介绍一个MFMessageComposeViewController它遵守UINavigationBar代理,如下所示。

在这里输入图像说明

这显然看起来很可怕,我宁愿MFMessageComposeViewController不坚持代理,但试图做

[[UINavigationBar appearanceWhenContainedIn:[MFMessageComposeViewController class], nil] setBarTintColor:[UIColor whiteColor]];

没有任何影响。

我应该采取什么行动?

hacky的方式:设置外观回到默认的白色,呈现模式,设置外观样式当模态返回。

或者,扭转你的想法。 将全局外观作为默认值。 然后,您可以在适当的位置select性地应用样式化的导航栏。

如果“适当的情况下”最终是90%的应用程序,只需设置一个UIViewController的瘦子类(或任何你使用的视图控制器),并使用你想要的外观。

 [[UINavigationBar appearanceWhenContainedIn:[MyStyledViewController class], nil] setBarTintColor:[UIColor colorWithRed:54./255 green:165./255 blue:53./255 alpha:1]]; 

并在每个.h文件中,将您的视图控制器超类设置为MyStyledViewController而不是普通的旧UIViewController

经过深入研究并尝试了几个不同的build议,我使用UINavigationController子类获得了一个非常好的解决scheme。

这允许我使用外观代理一次样式化所有需要的导航栏,除了MFMessageComposeViewControllerMFMailComposeViewController ,我希望看起来标准,以便与用户沟通,他们正在使用核心iOSfunction。

1 – 创build一个UINavigationController子类。

2 – 按照原样使用外观代理来设置导航栏的样式,但现在使用appearanceWhenContainedIn:

 [[UINavigationBar appearanceWhenContainedIn:[KCStyledNavController class], nil] setBarTintColor:[UIColor redColor]]; [[UINavigationBar appearanceWhenContainedIn:[KCStyledNavController class], nil] setTintColor:[UIColor whiteColor]]; 

3 – 进入你的故事板,select你想要的风格的所有UINavigationControllers ,并改变他们的风格的自定义类。