如何阻止SwiftUI按钮长按过程中出现置灰效果
要消除Button长按过程中的默认灰色高亮效果,只需修改按钮样式,禁用系统自带的交互反馈,以下是两种实用方案:
方案一:使用Plain按钮样式
给Button添加.buttonStyle(.plain)修饰符,直接移除系统默认的高亮效果,同时保留按钮的可点击特性:
@State private var pressed = false Button( action: { }, label: { Image("book_Fotor") .resizable() .scaledToFit() .frame(width: 70, height: 85) } ) .buttonStyle(.plain) // 关键:移除默认高亮样式 .scaleEffect(pressed ? 1.25 : 1.0) .onLongPressGesture( minimumDuration: 2.5, maximumDistance: .infinity, pressing: { pressing in withAnimation(.easeIn(duration: 0.75)) { self.pressed = pressing } }, perform: { } )
方案二:自定义ButtonStyle(灵活定制)
如果需要更精细的控制(比如仅禁用长按状态的高亮,保留其他状态逻辑),可以自定义ButtonStyle,完全掌控按钮在不同状态下的外观:
struct NoHighlightButtonStyle: ButtonStyle { func makeBody(configuration: Configuration) -> some View { configuration.label .opacity(1) // 强制保持原透明度 .foregroundColor(.primary) // 强制保持原颜色 // 若需要其他自定义样式,可在此添加 } } // 使用自定义样式 Button(...) .buttonStyle(NoHighlightButtonStyle()) .scaleEffect(pressed ? 1.25 : 1.0) // 其他修饰符...
说明
- 方案一的
.plain样式是最简便的选择,适合大多数场景,它会移除按钮的所有默认背景和高亮效果,只保留点击交互能力。 - 方案二的自定义样式适合需要定制化按钮外观的场景,你可以根据
configuration.isPressed自由调整状态表现,这里我们直接忽略该状态,确保颜色和透明度全程不变。
内容的提问来源于stack exchange,提问作者mzm0227
相关产品推荐
相关产品推荐

