如何让UIButton.Configuration的高亮效果匹配系统按钮?
要让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
相关产品推荐
相关产品推荐

