以编程方式添加的自定义UIBarButtonItem不尊重tintColor

时间:2018-07-10 21:16:25

标签: ios swift uibarbuttonitem uitoolbar

简而言之,如何更改黑色按钮项的颜色(同时保持对它们的大小的控制)?

更长的版本:我正在以编程方式将许多自定义UIBarButtonItems添加到UIToolbar。我正在使用the solution found here,以便可以控制商品的大小。

虽然这解决了UIBarButtonItem的大小问题,但它不像典型的UIBarButtonItem那样尊重tintColor。所以我得到这样的东西:

uitoolbar with incorrectly colored baritems

白色大号是我想要的颜色,但不是大小。此项只是在IB中添加的,其tintColor设置为默认值。

黑色小物件正好是我想要的大小,并添加了以下代码(标有//不产生预期结果的行):

    for e in (self.profile?.expressions)! {
        let button = UIButton()
        button.setImage(UIImage(named: "emojiph"), for: .normal)
        button.addTarget(self, action: #selector(onEmojiInsert), for: .touchUpInside)
        let barItem = UIBarButtonItem(customView: button)
        barItem.tag = e.family_expression_id
        let wConstraint = barItem.customView?.widthAnchor.constraint(equalToConstant: 32)
        wConstraint?.isActive = true
        let hConstraint = barItem.customView?.heightAnchor.constraint(equalToConstant: 32)
        hConstraint?.isActive = true

        // Not producing intented result
        button.tintColor = UIColor.white

        // Not producing intented result
        barItem.customView?.tintColor = UIColor.white

        // Not producing intented result
        barItem.tintColor = UIColor.white

        self.emojibar.items?.append(barItem)
        // Add flexible spacers
        if (e.family_expression_id < (self.profile?.expressions.count)!) {
            self.emojibar.items?.append(UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: nil, action: nil))
        }
    }

一种解决方法是提供白色图像资产,但我希望找到一个更优雅的解决方案(如果存在)。

1 个答案:

答案 0 :(得分:1)

要使按钮更改所显示图像的颜色以使其与色相匹配,则需要将按钮作为系统类型启动

let button = UIButton(type: .system)