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

如何禁用UIButton Plain样式下的标题高亮颜色?

解决iOS15 Plain样式UIButton高亮标题变色问题

iOS15推出的Plain样式按钮(基于UIButton.Configuration.plain()),其高亮状态的标题颜色逻辑和传统默认样式不同,传统的改按钮类型为自定义、设置adjustsImageWhenHighlighted或showsTouchWhenHighlighted都无法覆盖新配置的内置行为,以下是几种可行的解决方法:

  • 自定义配置的状态文本属性
    创建Plain配置后,直接强制所有状态下的标题颜色保持一致,或者单独指定高亮状态的颜色与普通状态相同:

    var plainConfig = UIButton.Configuration.plain()
    // 设定基础标题颜色
    plainConfig.baseForegroundColor = .black
    
    // 方式1:通过文本属性转换器统一所有状态的标题颜色
    plainConfig.titleTextAttributesTransformer = UIConfigurationTextAttributesTransformer { attrs in
        var modifiedAttrs = attrs
        modifiedAttrs.foregroundColor = plainConfig.baseForegroundColor
        return modifiedAttrs
    }
    
    // 方式2:直接指定高亮状态的标题颜色
    // plainConfig[.highlighted].titleTextAttributes = [.foregroundColor: UIColor.black]
    
    button.configuration = plainConfig
    
  • 重写按钮的高亮状态属性
    自定义按钮类,强制isHighlighted始终为false,彻底禁用高亮状态的触发:

    class NonHighlightablePlainButton: UIButton {
        override var isHighlighted: Bool {
            get { false }
            set { }
        }
    }
    

    使用这个自定义类创建按钮后,再设置Plain样式配置即可。

  • 改用自定义配置样式
    如果不需要Plain样式的默认交互特性,可以直接使用custom配置,此时传统的属性设置会生效:

    var customConfig = UIButton.Configuration.custom()
    customConfig.baseForegroundColor = .black
    button.configuration = customConfig
    button.adjustsImageWhenHighlighted = false
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 21:30:47