后退button奇怪地消失在UINavigationController但继续工作

在iOS7下,我一直在遇到一个问题,如果后退button项目已经设置了特定的背景图像,它将不会显示:

int imageSize = 21; //REPLACE WITH YOUR IMAGE WIDTH [[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(-400.f, 0) forBarMetrics:UIBarMetricsDefault]; UIImage *barBackBtnImg = [[UIImage imageNamed:@"BackArrowDark.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, imageSize, 0, 0)]; [[UIBarButtonItem appearance] setBackButtonBackgroundImage:barBackBtnImg forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 

在这样做的时候,我在导航控制器中按下的任何ViewController都不会出现后退button项,即使按下它应该出现的位置,也会使其出现,并且随后按下此视图控制器将会使button出现在屏幕上。

这个问题只在iOS7下出现:在iOS6下,一切正常。

使用leftBarButtonItem完全更改后退button将禁用后向滑动,所以这不是一个选项。

任何想法我做错了什么?

非常感谢您的考虑。

在尝试了不同的解决scheme之后,我发现改变backIndicatorImage在iOS7下效果最好,它似乎符合iOS7接口范例:

 [[UINavigationBar appearance] setTintColor:[UIColor grayColor]]; [[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(0, -60) forBarMetrics:UIBarMetricsDefault]; // Takes out title UIImage *backButtonImage = [UIImage imageNamed:@"BackArrowDark.png"]; if ([UINavigationBar instancesRespondToSelector:@selector(setBackIndicatorImage:)]) { [[UINavigationBar appearance] setBackIndicatorImage:backButtonImage]; [[UINavigationBar appearance] setBackIndicatorTransitionMaskImage:backButtonImage]; } else { int imageSize = 21; // REPLACE WITH YOUR IMAGE WIDTH [[UIBarButtonItem appearance] setBackButtonBackgroundImage:[backButtonImage resizableImageWithCapInsets:UIEdgeInsetsMake(0, imageSize, 0, 0)] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; } 

用这个方法:

  • 当返回到导航控制器时,后退button项目转换与默认指示灯相同(从iOS6下的后退button离开)。
  • 在iOS6下,backButton被更改并保持默认的iOS6行为。
  • 我很高兴!

确保你没有在视图控制器中调用它:

 self.navigationController.navigationBar.tintColor = [UIColor redColor]; 

在iOS 7中,这将会导航栏的颜色,但也会使您的button不可见,但function正如您所描述的。