iOS 11 UINavigationBar 后退按钮图像颜色问题

Posted

技术标签:

【中文标题】iOS 11 UINavigationBar 后退按钮图像颜色问题【英文标题】:iOS 11 UINavigationBar Back button image color issue 【发布时间】:2017-11-28 09:39:16 【问题描述】:

我在 ios 11 中遇到了自定义 BackButton Image 颜色的问题。

BackButton Image 在 iOS 11 更低的版本中可以正常工作。

我使用以下代码自定义了UINavigationBar 的后退按钮图像。

            [[UINavigationBar appearance] setBackgroundColor:[UIColor blackColor]];
    [[UINavigationBar appearance] setBarTintColor:[UIColor blackColor]];
    [[UINavigationBar appearance] setTintColor:[UIColor whiteColor]];
    [[UINavigationBar appearance] setTranslucent:false];

    UIEdgeInsets insets = UIEdgeInsetsMake(0, 0, 5.0f, 0);
    UIImage *backArrowImage = [[UIImage imageNamed:@"icon_nav_back"] imageWithAlignmentRectInsets:insets];
    [[UINavigationBar appearance] setBackIndicatorImage:backArrowImage];
    [[UINavigationBar appearance] setBackIndicatorTransitionMaskImage:backArrowImage];

在低于 iOS11 的版本中显示正确的图像,默认颜色的图像

但是,在 iOS 11 版本中,它的颜色和大小不合适。

请提供适当的解决方案来解决此问题。

我也尝试过 Tint Color,但它不起作用。

【问题讨论】:

检查这个 SO 问题:***.com/questions/28733936/… @Damo 我已经尝试了所有这些解决方案。这对我没有帮助。 【参考方案1】:

// 未经测试的代码

// 试试看能不能直接访问返回键

NSArray *leftBarButtonItems = self.navigationController.navigationBar.items.firstObject.leftBarButtonItems;
for (id barButtonItem in leftBarButtonItems) 
    UIBarButtonItem *item = (UIBarButtonItem*)barButtonItem;
    if (item) 
        item.tintColor = [UIColor whiteColor];
    

【讨论】:

【参考方案2】:

点击此链接:Swift how to change tintColor of backIndicatorImage

在此方法上设置图像setBackIndicatorTransitionMaskImage可能会有所帮助!

[UINavigationBar appearance].translucent = NO;
[[UINavigationBar appearance] setBackIndicatorImage:backArrowImage];
[[UINavigationBar appearance] setBackIndicatorTransitionMaskImage:backArrowImage];

更新使用下面的代码肯定是后退图片

UIButton *backBtn = [UIButton buttonWithType:UIButtonTypeCustom];
[backBtn setBackgroundImage:backArrowImage forState:UIControlStateNormal];
[backBtn addTarget:self action:@selector(goback) forControlEvents:UIControlEventTouchUpInside];
backBtn.frame = CGRectMake(0, 0, 54, 30);
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithCustomView:backBtn] ;
self.navigationItem.leftBarButtonItem = backButton;

【讨论】:

我已经修改了我的代码,你提供给我。但这对我没有帮助。 @yashica15 你已经使用了我更新的代码,它绝对有效!! 这段代码肯定能用。但我必须将此代码粘贴到每个 ViewController 中。我想从 AppDelegate 全局更改它。 点击此链接:Swift 如何更改 backIndicatorImage 的 tintColor 让我们continue this discussion in chat。

以上是关于iOS 11 UINavigationBar 后退按钮图像颜色问题的主要内容,如果未能解决你的问题,请参考以下文章

在iOS 11中忽略设置UINavigationBar外观

iOS 获取 UINavigationBar 的后退按钮以设置辅助功能属性

自定义返回指示器图像和 iOS 11

更改 UINavigationBar 后退按钮标题

带有 UINavigationController 的独立 UINavigationBar 中的后退按钮

iOS:删除 UINavigationBar 动画