【问题标题】:Back button strangely disappearing in UINavigationController but keeps working后退按钮在 UINavigationController 中奇怪地消失了,但仍在工作
【发布时间】:2013-10-07 23:14:51
【问题描述】:

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

知道我做错了什么吗?

非常感谢您的考虑。

【问题讨论】:

    标签: ios objective-c ios7


    【解决方案1】:

    在尝试了不同的解决方案后,发现在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 行为。
    • 我很高兴!

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多