我想添加一个带有图像的按钮(在左侧),如下所示:
在UIButton
方面,它似乎与setImage(_:for:)
类似。
到目前为止,我所做的是:
Button(action: {}) {
Text("Add To Cart")
.foregroundColor(.black)
.padding(.all, 10.0)
}
.background(Color.gray)
.cornerRadius(5.0)
结果非常接近所需的结果:
但是,我在SwiftUI Button中找不到与设置图片有关的任何属性/方法。
如何解决?
答案 0 :(得分:2)
您可以将其实现为:
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
类型(如问题代码中所述)片段)。
很显然,您可以通过在Text
之前添加Image
将图像添加到标签的右侧。另外,如果您打算将文本添加到图像上方(反之亦然),则可以简单地将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())
答案 1 :(得分:0)
你为什么不只是
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<AzureFunctionsVersion>v3</AzureFunctionsVersion>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Azure.Storage.Blob" Version="11.2.2" />
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions.Storage" Version="4.0.3" />
<PackageReference Include="Microsoft.NET.Sdk.Functions" Version="3.0.11" />
</ItemGroup>
<ItemGroup>
<None Update="host.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="local.settings.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<CopyToPublishDirectory>Never</CopyToPublishDirectory>
</None>
</ItemGroup>
</Project>