8

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

执行此操作后,我在导航控制器中推送的任何 ViewController 都不会出现后退按钮项,即使按下它应该在的位置也会使其出现,并且此视图控制器的任何后续推送都会使按钮出现在屏幕上.

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

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

知道我做错了什么吗?

非常感谢您的考虑。

4

2 回答 2

14

在尝试了不同的解决方案后,我发现在 iOS7 下更改 backIndicatorImage 效果最好,而且似乎符合 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];
}

使用这种方法:

  • 在导航控制器中返回时,返回按钮项的过渡与默认指示器相同(在 iOS6 下也是从返回按钮滑开的背离);
  • 在 iOS6 下,backButton 已更改并保持其默认的 iOS6 行为。
  • 我很高兴!
于 2013-10-08T02:54:34.307 回答
3

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

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

在 iOS 7 中,这将为导航栏着色,但也会使您的按钮不可见,但功能正如您所描述的那样。

于 2013-12-31T16:39:45.580 回答