我需要将导航栏设置为自定义颜色,以下代码将执行此操作:
[[UINavigationBar appearance]
setBackgroundImage:navigationBarTileImage forBarMetrics:UIBarMetricsDefault];
Run Code Online (Sandbox Code Playgroud)
但是我的应用程序调用系统MFMailComposeViewController和MFMessageComposeViewController,我希望导航栏成为这些视图的默认颜色,所以我这样做:
[[UINavigationBar appearanceWhenContainedIn: [MyViewControllerBase class], [MyViewController1 class], [MyViewController2 class], nil]
setBackgroundImage:navigationBarTileImage forBarMetrics:UIBarMetricsDefault];
Run Code Online (Sandbox Code Playgroud)
但是现在导航栏不再具有我的默认颜色.为什么外观当包含不起作用?
ric*_*ter 21
该参数appearanceWhenContainedIn:表示的图(和/或视图控制器)包含层次结构,而不是一个可能的容器的列表.(不可否认,文档对此并不清楚.请参阅WWDC 2011的视频.)因此,
[UINavigationBar appearanceWhenContainedIn:[NSArray arrayWithObjects:[MyViewControllerBase class], [MyViewController1 class], [MyViewController2 class], nil]]
Run Code Online (Sandbox Code Playgroud)
为你提供一个UINavigationBar包含在a中的外观代理MyViewControllerBase,反过来在a MyViewController1内MyViewController2.我猜这不是你拥有的收容等级.
相反,请查看包含导航栏的视图控制器.它可能是一个通用UINavigationController......但你不能这样做
[UINavigationBar apperanceWhenContainedIn:[NSArray arrayWithObject:[UINavigationController class]]]
Run Code Online (Sandbox Code Playgroud)
因为那时你也会得到邮件/消息控制器.遗憾的是,虽然您可以在UINavigationBar邮件/邮件视图控制器中获取外观代理,但是没有办法告诉它撤消更通用级别的外观更改.
看起来这种情况的通常解决方案是使自己成为UINavigationController子类,并将其用于您想要换肤的UI部分.子类可以为空 - 它仅用于标识UI的部分内容appearanceWhenContainedIn:.(同时,像MFMailComposeViewController继续使用默认外观一样,因为它们仍然使用泛型UINavigationController.)
| 归档时间: |
|
| 查看次数: |
6600 次 |
| 最近记录: |