我在appdelegate中使用以下代码:
UINavigationBar *navigationBar = [UINavigationBar appearance];
[navigationBar setBackgroundImage:[[UIImage imageNamed:@"top_bar"] stretchableImageWithLeftCapWidth:5 topCapHeight:5] forBarMetrics:UIBarMetricsDefault];
[navigationBar setBackgroundImage:[[UIImage imageNamed:@"top_bar_scape"] stretchableImageWithLeftCapWidth:5 topCapHeight:5] forBarMetrics:UIBarMetricsLandscapePhone];
一切正常但我得到了一个奇怪的Bug,当我打开iOS6 Facebook共享表并打开观众列表(或专辑列表无关紧要)时:使用我的top_bar-Image渲染导航栏。 见下面的屏幕:
< - 正常,没有我的外观变化 < - 我的外表变化的Buggy
任何想法如何避免这个错误? 谢谢! :)
答案 0 :(得分:2)
外观设置应用于定义设置后显示的所有控件。因此,在您的情况下,每个导航栏都将使用您的背景图像。 您可以通过更改外观设置(黑色)来解决问题,然后再按下应该具有黑色导航栏的视图控制器,并在使用黑色导航弹出视图控制器之前将其设置回来。 我的项目有类似的问题,我上面提到的解决了这个问题。
P.S对于任何拼写错误和源代码不足,我在路上,我正在用手机打字;)
答案 1 :(得分:2)
使用UIAppearance
方法进行的外观更改是全局的 - 这意味着它们会随处可见 。这可能非常有用或非常烦人。
您可以尝试解决此问题的一种方法是使用
[[UINavigationBar appearanceWhenContainedIn:...
或者,您可以创建导航栏的自定义子类,并仅对其应用外观更改:
[[MYNavigationBar appearance] setSomething:aThing];