2013-10-07 64 views
8

在iOS7我已经遇到了一个问题,如果它已经被设置了特定的背景图像返回按钮的项目将不会显示:后退按钮奇怪消失在UINavigationController的,但继续工作

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完全更改后退按钮会禁用后向滑动,因此这不是选项。

任何想法我做错了什么?

非常感谢您的考虑。

回答

14

尝试不同的解决方案之后,我发现改变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]; 
} 

使用这种方法:

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

确保您不会在视图控制器调用此:

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

在iOS系统7,这将着色的导航栏,但也会让你的按钮不可见,但功能就像你所描述。

相关问题