如何在 SwiftUI 中使用 material 设计文本字段
How to use material design text fields in SwiftUI
我想在 SwiftUI 中使用 Material 设计文本字段组件。有一个 Material 为 UIKit 而不是为 SwiftUI 编写的设计文本字段组件。是否可以在 SwiftUI 中使用此 Material 设计文本字段组件?
就我而言,无法在 SwiftUI 中直接使用 material-design。但是你可以将你的 UIKit 视图集成到你的 SwiftUI 视图中(对每个视图都这样做虽然有点乏味)并且你可以在你的 SwiftUI 视图中使用 material-design 。这就是我现在使用它的方式。
您可以使用 material-ui 样式创建自己的文本字段组件,我发现使用 swiftui 很容易。
import SwiftUI
struct CustomFieldText: View {
@Binding var name: String
var label: String
var required: Bool = true
var indicator: Bool = false
@State private var onKeyIn = false
var body: some View {
ZStack {
VStack(alignment: .leading) {
HStack {
Text(label)
if required {
Text("*")
}
Spacer()
}
.multilineTextAlignment(.leading)
.font(.custom("ZonaPro-SemiBold", size: self.onKeyIn || self.name != "" ? 14 : 18))
.foregroundColor(.white)
.offset(y: self.onKeyIn || self.name != "" ? -30 : 0)
.animation(.spring(response: 0.5, dampingFraction: 1, blendDuration: 0))
Rectangle().frame(height: 3)
.cornerRadius(10)
.foregroundColor(Color(#colorLiteral(red: 0.8392156863, green: 0.8784313725, blue: 0.8784313725, alpha: 1)))
}
VStack {
TextField(self.name, text: self.$name)
.font(.custom("ZonaPro-SemiBold", size: 18))
.autocapitalization(.none)
.textContentType(.nickname)
.foregroundColor(.white)
.padding(.bottom, 15)
.padding(.top, 5)
.onTapGesture {
self.onKeyIn = true
}
.zIndex(1)
}
VStack {
if indicator && self.name.count > 0 {
HStack {
Spacer()
Text("Verifying")
.font(.custom("ZonaPro-Light", size: 10))
.foregroundColor(Color.white)
}
}
}
}
}}
以及如何使用它?
CustomFieldText(name: self.$auth.email, label: "Your Email ID")
我想在 SwiftUI 中使用 Material 设计文本字段组件。有一个 Material 为 UIKit 而不是为 SwiftUI 编写的设计文本字段组件。是否可以在 SwiftUI 中使用此 Material 设计文本字段组件?
就我而言,无法在 SwiftUI 中直接使用 material-design。但是你可以将你的 UIKit 视图集成到你的 SwiftUI 视图中(对每个视图都这样做虽然有点乏味)并且你可以在你的 SwiftUI 视图中使用 material-design 。这就是我现在使用它的方式。
您可以使用 material-ui 样式创建自己的文本字段组件,我发现使用 swiftui 很容易。
import SwiftUI
struct CustomFieldText: View {
@Binding var name: String
var label: String
var required: Bool = true
var indicator: Bool = false
@State private var onKeyIn = false
var body: some View {
ZStack {
VStack(alignment: .leading) {
HStack {
Text(label)
if required {
Text("*")
}
Spacer()
}
.multilineTextAlignment(.leading)
.font(.custom("ZonaPro-SemiBold", size: self.onKeyIn || self.name != "" ? 14 : 18))
.foregroundColor(.white)
.offset(y: self.onKeyIn || self.name != "" ? -30 : 0)
.animation(.spring(response: 0.5, dampingFraction: 1, blendDuration: 0))
Rectangle().frame(height: 3)
.cornerRadius(10)
.foregroundColor(Color(#colorLiteral(red: 0.8392156863, green: 0.8784313725, blue: 0.8784313725, alpha: 1)))
}
VStack {
TextField(self.name, text: self.$name)
.font(.custom("ZonaPro-SemiBold", size: 18))
.autocapitalization(.none)
.textContentType(.nickname)
.foregroundColor(.white)
.padding(.bottom, 15)
.padding(.top, 5)
.onTapGesture {
self.onKeyIn = true
}
.zIndex(1)
}
VStack {
if indicator && self.name.count > 0 {
HStack {
Spacer()
Text("Verifying")
.font(.custom("ZonaPro-Light", size: 10))
.foregroundColor(Color.white)
}
}
}
}
}}
以及如何使用它?
CustomFieldText(name: self.$auth.email, label: "Your Email ID")