【发布时间】:2020-04-18 13:59:21
【问题描述】:
有没有办法在 SwiftUI 中获得破坏性的 Button 样式?
我知道我可以为ContextMenu 执行此操作,但我没有找到“正常”Button 的方法。
干杯
【问题讨论】:
有没有办法在 SwiftUI 中获得破坏性的 Button 样式?
我知道我可以为ContextMenu 执行此操作,但我没有找到“正常”Button 的方法。
干杯
【问题讨论】:
从 iOS 15 开始,您可以(并且应该!)为每个按钮分配一个 Role,例如:
Button("Delete", role: .destructive) {
deleteSomething()
}
将角色分配给按钮有助于系统为使用该按钮的每个上下文应用正确的样式(例如 this example for a context menu)
您可以创建修饰符的组合来创建所需的样式。
VStack {
Button("Plain", role: .none, action: { })
.buttonStyle(PlainButtonStyle())
Button("Automatic", role: .none, action: { })
.buttonStyle(.automatic)
Button("Log out", role: .cancel, action: { })
.buttonStyle(BorderedButtonStyle())
.tint(.yellow)
// with controlSize
Button("Cancel", role: .cancel, action: { })
.buttonStyle(.borderless)
.controlSize(.small)
.tint(.yellow)
Button("Delete", role: .destructive, action: { })
.buttonStyle(.bordered)
.controlSize(.regular)
// with controlProminence
Button(role: .destructive, action: { }, label: {
Text("Exit").frame(maxWidth: .infinity)
})
.buttonStyle(.bordered)
.controlSize(.large)
.controlProminence(.increased)
//with BorderedShape
Button(role: .destructive, action: { }, label: {
Text("Wow shape").frame(maxWidth: .infinity)
})
.buttonStyle(BorderedButtonStyle(shape: .capsule))
.controlSize(.large)
.controlProminence(.increased)
.tint(.purple)
}
【讨论】:
对于Button:
Button("Tap") {
// do something
}
.foregroundColor(.red)
对于Alert:
Alert(
title: Text("Hi"),
message: Text("Do it?"),
primaryButton: .cancel(Text("Cancel")),
secondaryButton: .destructive(Text("Delete")) {
// do something
}
)
ActionSheet 也是如此。
【讨论】: