You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让UIButton.Configuration的高亮效果匹配系统按钮?

解决UIButton.Configuration.plain按钮高亮不明显的问题

要让plain配置的按钮拥有和传统.system类型按钮(或UIBarButtonItem)一致的高亮效果,有几种可行方案:

方案1:利用configurationUpdateHandler自定义高亮状态

通过配置按钮的状态更新回调,在按钮被按压时手动调整透明度,模拟传统按钮的高亮反馈:

let newButton = UIButton(configuration: {
    var config = UIButton.Configuration.plain()
    config.title = "Plain Button"
    return config
}())
newButton.frame = CGRect(x: 50, y: 150, width: 150, height: 30)

// 添加状态变化处理逻辑
newButton.configurationUpdateHandler = { button in
    button.alpha = button.isHighlighted ? 0.5 : 1.0
}
view.addSubview(newButton)

方案2:用.system类型按钮搭配Configuration

直接初始化.system类型按钮,再应用plain配置,这样能直接继承传统系统按钮的高亮行为:

let newButton = UIButton(type: .system)
var config = UIButton.Configuration.plain()
config.title = "Plain Button"
newButton.configuration = config
newButton.frame = CGRect(x: 50, y: 150, width: 150, height: 30)
view.addSubview(newButton)

这种方式无需额外代码,就能让按钮保持原生的高亮透明度变化逻辑。

方案3:自定义按钮子类(全局统一控制)

如果需要多个按钮复用相同的高亮效果,可以创建UIButton子类,重写isHighlighted的setter方法:

class HighlightablePlainButton: UIButton {
    override var isHighlighted: Bool {
        didSet {
            alpha = isHighlighted ? 0.5 : 1.0
        }
    }
}

// 使用示例
let newButton = HighlightablePlainButton(configuration: {
    var config = UIButton.Configuration.plain()
    config.title = "Plain Button"
    return config
}())
newButton.frame = CGRect(x: 50, y: 150, width: 150, height: 30)
view.addSubview(newButton)

补充说明

  • 传统.system按钮的默认高亮透明度为0.5,你可以根据需求自行调整数值;
  • 方案2是最简便的实现方式,既能使用新的Configuration配置,又保留原生高亮逻辑;
  • 若需要更复杂的高亮效果(比如背景色变化),可在回调或子类中同时调整标题颜色、背景色等属性。

内容的提问来源于stack exchange,提问作者Jordan H

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 22:52:21