让我们检查一下!
import SwiftUI
struct ContentView: View {
@State private var email = ""
@State private var password = ""
var body: some View {
VStack() {
TextField("Email", text: self.$email)
.frame(height: 200).border(Color.red)
.textFieldStyle(RoundedBorderTextFieldStyle())
.cornerRadius(16)
.padding([.leading, .trailing], 24)
SecureField("Password", text: self.$password)
.frame(height: 55)
.textFieldStyle(RoundedBorderTextFieldStyle())
.cornerRadius(16)
.padding([.leading, .trailing], 24)
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
您必须了解视图修饰符的工作原理。 任何修饰符都会返回带有修改后内容的新视图。
看到这个 :-)
import SwiftUI
struct ContentView: View {
@State private var email = ""
@State private var password = ""
var body: some View {
VStack() {
TextField("Email", text: self.$email)
.frame(height: 200).border(Color.red)
.textFieldStyle(RoundedBorderTextFieldStyle())
.cornerRadius(16)
.padding([.leading, .trailing], 24)
SecureField("Password", text: self.$email)
.frame(height: 55)
.textFieldStyle(PlainTextFieldStyle())
.padding([.leading, .trailing], 4)
.cornerRadius(16)
.overlay(RoundedRectangle(cornerRadius: 16).stroke(Color.gray).padding(.bottom, -150).padding(.top, 50))
.padding([.leading, .trailing], 24)
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
如您所见,TextField 本身的样式从未更改,除非您明确更改它。
目前TextFieldStyle公共API非常有限
/// A specification for the appearance and interaction of a `TextField`.
@available(iOS 13.0, OSX 10.15, tvOS 13.0, watchOS 6.0, *)
public protocol TextFieldStyle {
}
您可以只选择一个预定义...
DefaultTextFieldStyle
PlainTextFieldStyle
RoundedBorderTextFieldStyle
SquareBorderTextFieldStyle
你是对的!您无法更改 TextField 的高度,它的高度取决于用于呈现它的字体,除了应用一些自定义 TextFieldStyle 它没有记录,并且可能会在未来的版本中更改...
更新,基于 How to change SwiftUI TextField style after tapping on it? (所有学分应归本问题作者所有)
自定义 TextFieldStyle 示例
import SwiftUI
struct ContentView: View {
@State private var email = ""
@State private var password = ""
var body: some View {
VStack() {
TextField("Email", text: self.$email)
.textFieldStyle(MyTextFieldStyle()).border(Color.blue)
}
}
}
struct MyTextFieldStyle: TextFieldStyle {
func _body(configuration: TextField<Self._Label>) -> some View {
configuration
.padding(30)
.background(
RoundedRectangle(cornerRadius: 20, style: .continuous)
.stroke(Color.red, lineWidth: 3)
).padding()
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
最后的样子,这就是你要找的……