我有一个自定义下拉列表,顶部项目是一个按钮(因为 .onTapGesture 不适用于标题中的项目),我想删除该按钮的点击效果(文本的不透明度更改)。当我点击选定的项目时,我希望与简单的文本相同,没有点击效果。
我尝试了 .animation(nil) 和 .buttonStyle(.plain) 但没有运气。
Button(action: {
isSelecting = !isSelecting
}) {
HStack {
Text(selectedItem?.title ?? "Select Item")
.animation(.none)
Spacer()
if items.count > 1 {
Image(systemName: "chevron.down")
}
}
.padding(.horizontal)
}
.buttonStyle(.plain)
.animation(nil)
.disabled(items.count < 2)
.onTapGesture {
isSelecting.toggle()
}
您可以创建自定义
ButtonStyle
。在 makeBody
中,不要选中 configuration.isPressed
。始终返回 accentColor
颜色的标签。
struct NoHighlightButtonStyle: ButtonStyle {
func makeBody(configuration: Configuration) -> some View {
// handle button role if necessary
// if configuration.role == .destructive {
// configuration.label.foregroundColor(.red)
// } else {
configuration.label.foregroundColor(.accentColor)
// }
}
}