仅对 navigationItem backBarButton Item 使用自定义图像

Posted

技术标签:

【中文标题】仅对 navigationItem backBarButton Item 使用自定义图像【英文标题】:Use only custom image for navigationItem backBarButton Item 【发布时间】:2017-03-13 16:52:07 【问题描述】:

我想删除标题并仅使用自定义图像作为导航控制器中的后退按钮。 我遇到了this 之类的问题,我已经尝试过:

navigationItem.backBarButtonItem = UIBarButtonItem(image: UIImage(named: Constants.Image.kClose), style: .plain, target: nil, action: nil)

我把它放在视图控制器的viewDidLoad() 中,它正在推送UITabbarController。 (我知道在导航控制器中推送标签栏不是一个好主意,但我需要这样做)。

我得到以下结果:

但我不想要那个默认的蓝色后退按钮。我只希望我的自定义关闭按钮出现在那里。我怎样才能做到这一点?

【问题讨论】:

为什么不将图像设置到左侧栏按钮项?它不工作吗?设置蓝色后退按钮图像...或清除蓝色后退按钮。 设置左键项不起作用。我不明白instate blue back button image 查看这篇文章可能对***.com/questions/40504860/…有帮助 【参考方案1】:

创建一个条形按钮

- (UIBarButtonItem *)backButton 
    UIButton *leftButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 4, 34, 34)];
    leftButton.layer.cornerRadius = leftButton.frame.size.width / 2;
    leftButton.layer.masksToBounds = YES;
    [leftButton setImage:[UIImage imageNamed:@"back"] forState:UIControlStateNormal];
    [leftButton addTarget:self action:@selector(backButtonTapped) forControlEvents:UIControlEventTouchUpInside];
    UIBarButtonItem *leftBarButton = [[UIBarButtonItem alloc] initWithCustomView:leftButton];
    return leftBarButton;

这样设置

self.navigationItem.leftBarButtonItem = [self backButton];

【讨论】:

【参考方案2】:
self.navigationController?.navigationBar.backIndicatorImage = backImage
self.navigationController?.navigationBar.backIndicatorTransitionMaskImage = backImage
self.navigationController?.navigationBar.backItem?.title = ""
UIBarButtonItem.appearance().setTitleTextAttributes([NSAttributedString.Key.foregroundColor: UIColor.clear], for: .normal)
UIBarButtonItem.appearance().setTitleTextAttributes([NSAttributedString.Key.foregroundColor: UIColor.clear], for: UIControl.State.highlighted)

【讨论】:

什么是setBackIndicatorImage /* 后退指示器图像显示在后退按钮旁边。后退指示符转换掩码图像在推送和弹出转换期间用作内容掩码 注意:如果要自定义后退指示符图像,则必须同时设置这些属性。 */ 但是选择器 setBackIndicatorImage 是什么?它在哪里定义?如果我使用它,编译器会抛出错误。

以上是关于仅对 navigationItem backBarButton Item 使用自定义图像的主要内容,如果未能解决你的问题,请参考以下文章

从 navigationItem 中删除项目以编程方式显示 navigationItems 标题

当我向 navigationItem 添加更多按钮时,如何使我的 navigationItem.titleView 居中?

更改 NavigationItem 标题

在navigationItem中居中titleView

如何重新加载 NavigationItem 标题

navigationItem和navigationBar相关性