将 UIBarButton 的 tintcolor 更改为 UIButton 作为其自定义视图

Change tintcolor of UIBarButton with UIButton as its customview

我正在创建一个 UIBarbutton 项目,如下所示

func createNavigationButton(_ btnImage: UIImage, btnAction: Selector) -> UIBarButtonItem {
    let btn = UIButton()
    btn.setImage(btnImage, for: UIControl.State())
    btn.frame = CGRect(x: 0, y: 0, width: 30, height: 30)
    btn.addTarget(self, action: btnAction, for: .touchUpInside)
    let item = UIBarButtonItem()
    item.customView = btn
    item.tintColor = .red
    return item
}

Tint 颜色不变。

如果我简单地创建像

let item = UIBarButtonItem.init(image: btnImage,
                                    style: .plain,
                                    target: self,
                                    action: btnAction)
item.tintColor = .red

色调颜色正在改变。但是,由于某些原因,我需要一个 UIbutton 作为我的 barbuttons 的自定义视图。

如何更改以 UIbutton 为自定义视图的 UIBarbuttonItem 的颜色?

您必须使用 system 类型实例化按钮才能设置色调。然后将色调颜色设置为 btn 本身。

let btn = UIButton(type: .system)
btn.tintColor = .red

或者,您可以在 UIImage.

上强制使用渲染模式
btn.setImage(btnImage.withRenderingMode(.alwaysTemplate), for: UIControl.State())
btn.tintColor = .red
  1. 使用图像作为模板图像:UIImage(named: "nameOfTheImage")!.withRenderingMode(.alwaysTemplate)
  2. 如果图像在按钮上,您必须设置按钮色调颜色。

    func createNavigationButton(_ btnImage: UIImage, btnAction: Selector) -> UIBarButtonItem { let btn = UIButton() btn.setImage(btnImage, for: UIControl.State()) btn.frame = CGRect(x: 0, y: 0, width: 30, height: 30) btn.addTarget(self, action: btnAction, for: .touchUpInside) btn.tintColor = .red let item = UIBarButtonItem() item.customView = btn item.tintColor = .red return item }