后退按钮奇怪地在UINavigationController中消失,但仍在继续工作

Fré*_*eux 8 objective-c ios ios7

在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];
Run Code Online (Sandbox Code Playgroud)

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

这个问题只出现在iOS7下:一切都在iOS6下完美运行.

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

知道我做错了什么吗?

非常感谢您的考虑.

Fré*_*eux 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];
}
Run Code Online (Sandbox Code Playgroud)

用这种方法:

  • 当返回导航控制器时,后退按钮项目转换与默认指示器相同(在iOS6下,后退按钮的偏离也会滑落);
  • 在iOS6下,backButton已更改并保持其默认的iOS6行为.
  • 我很高兴!