在iOS7下,我遇到了以下问题:如果使用特定的背景图片设置了后退按钮项,则该按钮不会显示:

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];

完成此操作后,我按导航 Controller 中的任何ViewController都不会出现后退按钮项,即使按应按的位置也会使其显示,并且此 View Controller 的任何后续按入操作都会在屏幕上显示该按钮。 。

此问题仅在iOS7下出现:在iOS6下一切正常。

使用leftBarButtonItem完全更改后退按钮会禁用后退滑动,因此这不是一个选项。

知道我在做什么错吗?

非常感谢您的考虑。

最佳答案

在尝试了不同的解决方案之后,我发现更改backIndicatorImage在iOS7下效果最好,并且似乎与iOS7接口(interface)范例一致:

[[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];
}

使用此方法:
  • 在导航 Controller 中返回时,后退按钮项的转换与默认指示器相同(在iOS6中,后退按钮的滑动也消失了);
  • 在iOS6下,更改了backButton并保留其默认的iOS6行为。
  • 我很高兴!
  • 10-08 06:29
    查看更多