UINavigationBar外观和Facebook-Sheet Bug

时间:2013-04-27 20:07:27

标签: ios facebook uinavigationbar uiappearance

我在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渲染导航栏。 见下面的屏幕:

Normal without my appearance changes < - 正常,没有我的外观变化 Buggy with my appearance changes < - 我的外表变化的Buggy

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

2 个答案:

答案 0 :(得分:2)

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

P.S对于任何拼写错误和源代码不足,我在路上,我正在用手机打字;)

答案 1 :(得分:2)

使用UIAppearance方法进行的外观更改是全局的 - 这意味着它们会随处可见 。这可能非常有用或非常烦人。

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

[[UINavigationBar appearanceWhenContainedIn:...

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

[[MYNavigationBar appearance] setSomething:aThing];