如何移除带背景图片的SLButtonWithImage点击时的灰色高亮样式?
我有一个带背景图片的SLButtonWithImage按钮,点击时会出现灰色填充的高亮效果,想要移除这个样式。
解决方法
灰色高亮是UIButton默认的高亮行为导致的,你可以通过以下方式移除:
方式1:初始化按钮时禁用图片高亮调整
在创建barButton的代码中添加一行,直接关闭按钮默认的图片高亮调整逻辑:
barButton = SLButtonWithImage(type: .custom) barButton.configuration = .none barButton.tag = index barButton.adjustsImageWhenHighlighted = false // 新增这一行 barButton.imageView?.tintAdjustmentMode = .normal barButton.translatesAutoresizingMaskIntoConstraints = false // 其余原有代码...
这个属性会阻止按钮在高亮状态下自动对图片添加灰色滤镜或调整透明度,完全保留你设置的.normal状态图片样式。
方式2:在自定义按钮类中默认禁用高亮调整
修改SLButtonWithImage类,添加初始化方法默认关闭该属性,避免每次创建按钮都要手动设置:
class SLButtonWithImage: UIButton { override init(frame: CGRect) { super.init(frame: frame) commonSetup() } required init?(coder: NSCoder) { super.init(coder: coder) commonSetup() } private func commonSetup() { adjustsImageWhenHighlighted = false } // 原有的其余代码... override var isHighlighted: Bool { didSet { if oldValue == false && isHighlighted { highlight() } else if oldValue == true && !isHighlighted { unhighlight() } } } func setup(highlightScale: CGFloat, highlightDuration: TimeInterval, unhighlightDuration: TimeInterval) { buttonHighlightedScale = highlightScale buttonHighlightDuration = highlightDuration } func highlight() { animateScale(to: buttonHighlightedScale, duration: buttonScaleDownDuration) } func unhighlight() { animateScale(to: 1, duration: buttonScaleUpDuration) isSelected.toggle() } private func animateScale(to scale: CGFloat, duration: TimeInterval) { UIView.animate( withDuration: duration, delay: 0, usingSpringWithDamping: 0.5, initialSpringVelocity: 0.5, options: [], animations: { self.transform = .init(scaleX: scale, y: scale) }, completion: nil) } }
额外补充
如果按钮仍存在背景色的高亮变化,可以同时添加以下设置:
barButton.adjustsImageWhenDisabled = false // 可选,禁用禁用状态下的图片调整 barButton.setBackgroundImage(nil, for: .highlighted) // 确保未设置高亮状态的背景图
内容的提问来源于stack exchange,提问作者user25462420
相关产品推荐
相关产品推荐

