您可以将其实现为:
Button(action: {}) {
HStack(alignment: .center, spacing: 5.0) {
Image("cart")
.padding(.leading, 10.0)
Text("Add to Cart")
.foregroundColor(.black)
.padding(.all, 10.0)
}
}
.background(Color.gray)
.cornerRadius(5.0)
传递 HStack 而不是 Text 就可以了。
为了澄清,在按钮标签旁边添加图像不再与按钮直接相关!当使用init(action:label:) 初始化器创建按钮时,我们将() -> Label 作为第二个参数传递;如果您跟踪Label 的类型,您会发现它基本上是View,因此您不必为它返回Text 类型(如问题代码sn-p 中所述)。
显然,您可以通过在Image 之前添加Text 来将图像添加到标签的右侧。此外,如果您的目标是在图像顶部添加文本(反之亦然),您可以简单地将 HStack 替换为 VStack。
此外,更可重用的代码
您可以通过为按钮创建自定义主体View 来使您的代码更易于重用。此外,您可以创建一个自定义ViewModifier:
import SwiftUI
// Custom View
struct CustomButtonBody: View {
private var iconName: String
private var title: String
init(iconName: String = "cart", title: String) {
self.iconName = iconName
self.title = title
}
var body: some View {
HStack(alignment: .center, spacing: 5.0) {
Image(iconName)
.padding(.leading, 10.0)
Text(title)
.foregroundColor(.black)
.padding(.all, 10.0)
}
}
}
// Custom Modifier
struct CustomButtonModifier: ViewModifier {
func body(content: Content) -> some View {
return content
.background(Color.gray)
.cornerRadius(5.0)
}
}
因此:
Button(action: {}) {
CustomButtonBody(title: "Add to Cart")
}
.modifier(CustomButtonModifier())