【问题标题】:iOS 11 UINavigationBar Back button image color issueiOS 11 UINavigationBar 后退按钮图像颜色问题
【发布时间】: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,但它不起作用。

【问题讨论】:

标签: ios objective-c image uinavigationbar ios11


【解决方案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