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。
这允许我使用外观代理一次样式化所有需要的导航栏,除了MFMessageComposeViewController
和MFMailComposeViewController
,我希望看起来标准,以便与用户沟通,他们正在使用核心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
,并改变他们的风格的自定义类。