无法在 TextField 中键入
Unable to type in TextField
我正在使用 SwiftUI 框架创建一个 SignUp
屏幕。
我有两个文本框,FirstName
和 LastName
,还有一个按钮。
我将它们分组在 VStack
中。
当我在 运行 应用程序时,按钮是可点击的,但我无法在文本字段中输入任何内容。
这是我的代码:
@State var firstName = ""
@State var lastName = ""
var body: some View {
NavigationView {
VStack {
VStack {
VStack {
Group {
TextField($firstName, placeholder: Text("First Name")).padding(10)
}.background(Color.white).clipShape(RoundedRectangle(cornerRadius: 5))
.shadow(radius: 3)
Group {
TextField($lastName, placeholder: Text("Last Name")).padding(10)
}.background(Color.white).clipShape(RoundedRectangle(cornerRadius: 5))
.shadow(radius: 3)
Button(action: {
}) {
Group {
Text("Create User").color(.white).padding(10)
}.background(Color.blue).clipShape(RoundedRectangle(cornerRadius: 5))
.shadow(radius: 5)
}
}.padding(12)
.background(Color.gray)
.shadow(radius: 5)
}.background(Color.gray)
}.navigationBarTitle(Text("Sign Up"))
}
}
在 VStack 上添加阴影创建问题。请检查下面的代码。我把影子注释掉了。
struct ContentView: View {
@State var firstName = ""
@State var lastName = ""
var body: some View {
NavigationView {
VStack {
VStack {
VStack {
Group {
TextField($firstName, placeholder: Text("First Name")).padding(10)
}.background(Color.black).clipShape(RoundedRectangle(cornerRadius: 5))
.shadow(radius: 3)
Group {
TextField($lastName, placeholder: Text("Last Name")).padding(10)
}.background(Color.black).clipShape(RoundedRectangle(cornerRadius: 5))
.shadow(radius: 3)
Button(action: {
print("Button Tapped")
}) {
Group {
Text("Create User").color(.white).padding(10)
}.background(Color.blue).clipShape(RoundedRectangle(cornerRadius: 5))
.shadow(radius: 5)
}
}.padding(12)
.background(Color.gray)
// .shadow(radius: 5)
}.background(Color.gray)
}.navigationBarTitle(Text("Sign Up"))
}
}
}
似乎在 color/opacity 效果之后设置 shadow
会导致此特定场景出现问题。
为了确保合成效果在 之前 渲染阴影,您可以将 .compositingGroup()
添加到 VStack
- 就在 shadow
之前 -这解决了问题。
A compositing group makes compositing effects in this view’s ancestor views, like opacity and the blend mode, take effect before this view renders.
修改后的代码:
VStack {
// [...]
}
.padding(12)
.background(Color.gray)
.compositingGroup() // THIS
.shadow(radius: 5)
.navigationBarTitle(Text("Sign Up"))
UI 可以通过这种方式进一步简化 - 它达到相同的结果。
struct ContentView: View {
@State var firstName = ""
@State var lastName = ""
var body: some View {
NavigationView {
VStack {
TextField($firstName, placeholder: Text("First Name"))
.padding(10)
.background(Color.white)
.cornerRadius(5)
.shadow(radius: 3)
TextField($lastName, placeholder: Text("Last Name"))
.padding(10)
.background(Color.white)
.cornerRadius(5)
.shadow(radius: 3)
Button(action: { }) {
Text("Create User")
.color(.white)
.padding(10)
.background(Color.blue)
.cornerRadius(5)
.shadow(radius: 5)
}
}
.padding(12)
.background(Color.gray)
.compositingGroup()
.shadow(radius: 5)
.navigationBarTitle(Text("Sign Up"))
}
}
}
我正在使用 SwiftUI 框架创建一个 SignUp
屏幕。
我有两个文本框,FirstName
和 LastName
,还有一个按钮。
我将它们分组在 VStack
中。
当我在 运行 应用程序时,按钮是可点击的,但我无法在文本字段中输入任何内容。
这是我的代码:
@State var firstName = ""
@State var lastName = ""
var body: some View {
NavigationView {
VStack {
VStack {
VStack {
Group {
TextField($firstName, placeholder: Text("First Name")).padding(10)
}.background(Color.white).clipShape(RoundedRectangle(cornerRadius: 5))
.shadow(radius: 3)
Group {
TextField($lastName, placeholder: Text("Last Name")).padding(10)
}.background(Color.white).clipShape(RoundedRectangle(cornerRadius: 5))
.shadow(radius: 3)
Button(action: {
}) {
Group {
Text("Create User").color(.white).padding(10)
}.background(Color.blue).clipShape(RoundedRectangle(cornerRadius: 5))
.shadow(radius: 5)
}
}.padding(12)
.background(Color.gray)
.shadow(radius: 5)
}.background(Color.gray)
}.navigationBarTitle(Text("Sign Up"))
}
}
在 VStack 上添加阴影创建问题。请检查下面的代码。我把影子注释掉了。
struct ContentView: View {
@State var firstName = ""
@State var lastName = ""
var body: some View {
NavigationView {
VStack {
VStack {
VStack {
Group {
TextField($firstName, placeholder: Text("First Name")).padding(10)
}.background(Color.black).clipShape(RoundedRectangle(cornerRadius: 5))
.shadow(radius: 3)
Group {
TextField($lastName, placeholder: Text("Last Name")).padding(10)
}.background(Color.black).clipShape(RoundedRectangle(cornerRadius: 5))
.shadow(radius: 3)
Button(action: {
print("Button Tapped")
}) {
Group {
Text("Create User").color(.white).padding(10)
}.background(Color.blue).clipShape(RoundedRectangle(cornerRadius: 5))
.shadow(radius: 5)
}
}.padding(12)
.background(Color.gray)
// .shadow(radius: 5)
}.background(Color.gray)
}.navigationBarTitle(Text("Sign Up"))
}
}
}
似乎在 color/opacity 效果之后设置 shadow
会导致此特定场景出现问题。
为了确保合成效果在 之前 渲染阴影,您可以将 .compositingGroup()
添加到 VStack
- 就在 shadow
之前 -这解决了问题。
A compositing group makes compositing effects in this view’s ancestor views, like opacity and the blend mode, take effect before this view renders.
修改后的代码:
VStack {
// [...]
}
.padding(12)
.background(Color.gray)
.compositingGroup() // THIS
.shadow(radius: 5)
.navigationBarTitle(Text("Sign Up"))
UI 可以通过这种方式进一步简化 - 它达到相同的结果。
struct ContentView: View {
@State var firstName = ""
@State var lastName = ""
var body: some View {
NavigationView {
VStack {
TextField($firstName, placeholder: Text("First Name"))
.padding(10)
.background(Color.white)
.cornerRadius(5)
.shadow(radius: 3)
TextField($lastName, placeholder: Text("Last Name"))
.padding(10)
.background(Color.white)
.cornerRadius(5)
.shadow(radius: 3)
Button(action: { }) {
Text("Create User")
.color(.white)
.padding(10)
.background(Color.blue)
.cornerRadius(5)
.shadow(radius: 5)
}
}
.padding(12)
.background(Color.gray)
.compositingGroup()
.shadow(radius: 5)
.navigationBarTitle(Text("Sign Up"))
}
}
}