1

我在我的 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 呈现。请参阅以下屏幕:

正常没有我的外表变化 <- 正常,没有我的外观变化 越野车与我的外观变化 <- 有我的外观变化的越野车

知道如何避免这个错误吗?谢谢!:)

4

2 回答 2

2

外观设置应用于定义设置后显示的所有控件。因此,在您的情况下,每个导航栏都将使用您的背景图片。您可以通过在推动应该具有黑色导航栏的视图控制器之前更改外观设置(黑色)来解决您的问题,并在弹出带有黑色导航的视图控制器之前将它们设置回来。我在我的项目中遇到了类似的问题,我上面提到的解决了这个问题。

PS 对于任何拼写错误和缺少源代码,我很抱歉,我正在路上,我正在用手机打字;)

于 2013-04-27T20:36:27.500 回答
2

UIAppearance使用这些方法进行的外观更改是全局性的——这意味着它们在任何地方都有效。这可能非常有用或非常烦人。

您可以尝试解决此问题的一种方法是使用

[[UINavigationBar appearanceWhenContainedIn:...

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

[[MYNavigationBar appearance] setSomething:aThing];
于 2013-04-27T20:50:00.220 回答