导航栏按钮图片

Posted

技术标签:

【中文标题】导航栏按钮图片【英文标题】:Navigation bar button image 【发布时间】:2015-02-03 12:53:17 【问题描述】:

我正在使用此代码在导航栏上获取徽标。

override func viewDidAppear(animated: Bool) 

    let image = UIImage(named: "LogoWithTextSmaller.png")
    self.navigationItem.leftBarButtonItem = UIBarButtonItem(image: image, style: UIBarButtonItemStyle.Plain, target: nil, action: nil)
    

这很好,但徽标没有任何颜色 - 除了“蓝色”。是不是因为它是一个png文件。有什么我可以让它保留原来的颜色

我已经这样做了:

self.navigationItem.titleView = UIImageView(image: image)

这会将图像以正确的颜色带到导航栏 - 但它在中间,我想要它在左边。

【问题讨论】:

您尝试过更改 Tintcolor 吗? UINavigationBar.appearance().tintColor = UIColor.redColor() 我已经在 NAV 栏上设置了背景色,图像是透明的,是浅蓝色和绿色,但是当我使用 leftBarButtonItem 添加它时,它会变成暗蓝色。当我使用 titleview 显示图像时 - 很好,但我需要把它放在左边而不是中间。 你试过了吗:self.navigationItem.leftBarButtonItem.tintColor = UIColor.redColor() 是的,颜色改变了,但是颜色在 png 文件中而不是在 ios 上 :( 所以它不起作用,因为颜色不正确 - png 中有多种颜色。 【参考方案1】:

您需要声明图像始终保持原始状态。所以添加如下代码

var image = UIImage(named: "image-name")
image = image?.withRenderingMode(.alwaysOriginal)
self.navigationItem.leftBarButtonItem = UIBarButtonItem(image: image, style:.plain, target: nil, action: nil)

【讨论】:

@bhavik shah 谢谢这很好用。唯一的问题。使用的图像需要非常小才能适合导航栏,然后看起来像素化,尤其是在 6 和 6 plus 上。有没有一种方法可以使用大图像但设置一个框架以使其适合导航栏? 您实际上可以通过单行实现:someBarButtonItem.image = UIImage(named: "yourPictureName")?.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)【参考方案2】:

Swift 3 中可以使用以下语法实现相同的操作

var image = UIImage(named: "Filter")
image = image?.withRenderingMode(UIImageRenderingMode.alwaysOriginal)
self.navigationItem.rightBarButtonItem = UIBarButtonItem(image:image , style: UIBarButtonItemStyle.plain, target: nil, action: nil)

【讨论】:

【参考方案3】:

Swift 3.0

let btnLogo = UIButton(frame: CGRect(x: 0, y: 0, width: 25, height: 25))
btnLogo.setTitle("", for: .normal)
btnLogo.backgroundColor = UIColor.clear
btnLogo.layer.cornerRadius = 4.0
btnLogo.layer.masksToBounds = true

var imageLogo = UIImage(named: "LogoWithTextSmaller.png")
imageLogo = imageLogo?.withRenderingMode(UIImageRenderingMode.alwaysOriginal)
btnLogo.setImage(imageLogo, for: .normal)

let barButton = UIBarButtonItem(customView: btnLogo)
self.navigationItem.leftBarButtonItem = barButton

swift 2.0

var image = UIImage(named: "Filter")
image = image?.imageWithRenderingMode(UIImageRenderingMode.alwaysOriginal)

Objective-C

 UIImage *image = [[UIImage alloc] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];

 UIBarButtonItem *_btnLeftBar = [[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"LogoWithTextSmaller.png"]
                                                      style:UIBarButtonItemStylePlain
                                                     target:self
                                                     action:@selector(yourMethod)];

 self.navigationItem.rightBarButtonItem= _btnLeftBar;

有关 withRenderingMode(_:) 的详细信息,请参阅下面的苹果文档链接 https://developer.apple.com/documentation/uikit/uiimage/1624153-withrenderingmode

【讨论】:

【参考方案4】:

SWIFT 4

    let back = UIImage(named: "back_white")?.withRenderingMode(.alwaysOriginal)
    self.navigationItem.leftBarButtonItem = UIBarButtonItem(image: back, style:.plain, target: nil, action: nil)

【讨论】:

【参考方案5】:

在 swift 3.0 中

    let Navigateimage = UIImage(named: "LogoWithTextSmaller.png")
    Navigateimage = Navigateimage?.withRenderingMode(.alwaysOriginal)
    self.navigationItem.leftBarButtonItem = UIBarButtonItem(image: Navigateimage, style:.plain, target: nil, action: nil)

【讨论】:

【参考方案6】:

Swift 3 如果该项目丢失,您可以试试这个。

  let navigationBar = navigationController?.navigationBar
  let topItem = navigationBar?.topItem
  var navigateimage = UIImage(named: "addConnectionFromSupport")
  navigateimage = navigateimage?.withRenderingMode(.alwaysOriginal)
  topItem?.rightBarButtonItem = UIBarButtonItem(image: navigateimage, style:.plain, target: nil, action: nil)

【讨论】:

以上是关于导航栏按钮图片的主要内容,如果未能解决你的问题,请参考以下文章

导航栏背景图片

ios导航栏又按钮添加图片后使其保持原色

更改导航栏的按钮颜色

向导航栏添加另一个按钮

导航栏使用UIButton自定义返回按钮的图片

iOS 导航栏项目图片大小