如何禁用UIButton Plain样式下的标题高亮颜色?
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
相关产品推荐
相关产品推荐

