我有一个外观代理,可以在barTintColor
UINavigationBar
属性设置为绿色
[[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]];
没有任何影响。
我应该采取什么行动?
答案 0 :(得分:6)
hacky方式:将外观设置回默认白色,显示模态,将外观设置为模态返回时的样式。
或者,改变你的想法。将全局外观保留为默认值。然后,您可以选择适当地应用样式化导航栏。
如果“在适当的地方”最终成为应用程序的90%,只需设置一个UIViewController的瘦子类(或者你经常使用的任何视图控制器),然后使用你希望外观的那个。
[[UINavigationBar appearanceWhenContainedIn:[MyStyledViewController class], nil]
setBarTintColor:[UIColor colorWithRed:54./255 green:165./255 blue:53./255 alpha:1]];
在每个.h文件中,将视图控制器超类设置为MyStyledViewController
而不是普通的UIViewController
。
答案 1 :(得分:5)
在深入挖掘并尝试了一些不同的建议之后,我使用UINavigationController子类获得了一个很好的非hacky解决方案。
这允许我使用外观代理设置所有想要的导航栏的样式,但MFMessageComposeViewController
和MFMailComposeViewController
除外,我希望看起来是标准的,以便与用户,他们正在使用核心iOS功能。
1 - 创建一个UINavigationController
子类。
2 - 按原样使用外观代理设置导航栏的样式,但现在使用appearanceWhenContainedIn:
[[UINavigationBar appearanceWhenContainedIn:[KCStyledNavController class], nil] setBarTintColor:[UIColor redColor]];
[[UINavigationBar appearanceWhenContainedIn:[KCStyledNavController class], nil] setTintColor:[UIColor whiteColor]];
3 - 进入您的故事板,选择您想要设置的所有UINavigationControllers
样式并将其自定义类更改为您的样式。