UINavigationBar外观和Facebook的表错误

我在我的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]; 

一切工作正常,但我有一个奇怪的错误,当我打开iOS6的Facebook共享表,并打开观众列表(或专辑列表无关紧要):导航栏与我的top_bar-Image呈现。 请参阅以下屏幕:

正常没有我的外观变化 < – 正常没有我的外观变化 越野车与我的外观变化 我的外观改变了

任何想法如何避免这个错误? 谢谢! 🙂

使用UIAppearance方法进行的外观变化是全球性的 – 意味着它们在任何地方都能生效。 这可能是非常非常有用或非常非常烦人的。

你可以尝试解决这个问题的一种方法是使用

 [[UINavigationBar appearanceWhenContainedIn:... 

或者,您可以制作导航栏的自定义子类 ,并将您的外观更改仅应用于其:

 [[MYNavigationBar appearance] setSomething:aThing]; 

在定义设置后,外观设置将应用于所有显示的控件。 所以在你的情况下,每个导航栏将使用你的背景图片。 您可以通过更改外观设置(黑色)来解决您的问题,然后再按下应该有黑色导航栏的视图控制器并将其设置回来,然后再用黑色导航栏popup视图控制器。 我的项目也有类似的问题,上面提到的问题解决了这个问题。

PS对不起,任何拼写错误和缺乏源代码,我在路上,我从我的手机打字;)