iOS 14 SwiftUI键盘自动提升视图
我在视图中使用TextField,当它成为第一个响应者时,它会离开视图,如下图所示 我有没有办法摆脱这种行为 这是我的密码iOS 14 SwiftUI键盘自动提升视图,swift,keyboard,swiftui,textfield,ios14,Swift,Keyboard,Swiftui,Textfield,Ios14,我在视图中使用TextField,当它成为第一个响应者时,它会离开视图,如下图所示 我有没有办法摆脱这种行为 这是我的密码 NavigationView(content: { ZStack{ MyTabView(selectedIndex: self.$index) .view(item: self.item1) { NewView(title: "Hello1").navigationBarT
NavigationView(content: {
ZStack{
MyTabView(selectedIndex: self.$index)
.view(item: self.item1) {
NewView(title: "Hello1").navigationBarTitle("")
.navigationBarHidden(true)
}
.view(item: self.item2) {
NewView(title: "Hello2").navigationBarTitle("")
.navigationBarHidden(true)
}
.view(item: self.item3) {
NewView(title: "Hello3").navigationBarTitle("")
.navigationBarHidden(true)
}
}.navigationBarHidden(true)
.navigationBarTitle("")
}).ignoresSafeArea(.keyboard, edges: .bottom)
//新观点
struct NewView:View {
@State var text:String = ""
var title:String
var body: some View {
VStack {
Spacer()
Text("Hello")
TextField(title, text: self.$text)
.textFieldStyle(RoundedBorderTextFieldStyle())
}.padding()
.onAppear {
debugPrint("OnApper \(self.title)")
}
}
}
您应该在
ZStack
上应用修饰符,而不是NavigationView
NavigationView(content: {
ZStack{
,,,
}.navigationBarHidden(true)
.navigationBarTitle("")
.ignoresSafeArea(.keyboard, edges: .bottom) // <- This line moved up
})
您应该在
ZStack
上应用修饰符,而不是导航视图
NavigationView(content: {
ZStack{
,,,
}.navigationBarHidden(true)
.navigationBarTitle("")
.ignoresSafeArea(.keyboard, edges: .bottom) // <- This line moved up
})
我就是这么想的:
GeometryReader { _ in
ZStack {
//PUT CONTENT HERE
}.frame(width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height)
}
这似乎对我有用。在这种情况下,您不需要检查iOS 14的可用性。这就是我的想法:
GeometryReader { _ in
ZStack {
//PUT CONTENT HERE
}.frame(width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height)
}
这似乎对我有用。在这种情况下,您不需要检查iOS 14的可用性。对于
。要工作,您需要填充所有可用区域(例如,使用垫片)
以下将不起作用(没有空格,只有一个文本字段):
但是,当您添加垫片(填充所有可用空间)时,将起作用:
如果不想使用垫片,也可以使用GeometryReader
:
struct ContentView: View {
@State var text: String = ""
var body: some View {
GeometryReader { _ in
...
}
.ignoresSafeArea(.keyboard, edges: .bottom)
}
}
要使.ignoresSafeArea
正常工作,您需要填充所有可用区域(例如,使用垫片
)
以下将不起作用(没有空格,只有一个文本字段):
但是,当您添加垫片(填充所有可用空间)时,将起作用:
如果不想使用垫片,也可以使用GeometryReader
:
struct ContentView: View {
@State var text: String = ""
var body: some View {
GeometryReader { _ in
...
}
.ignoresSafeArea(.keyboard, edges: .bottom)
}
}
结合此处发布的答案,并考虑以下内容(Xcode 12.4,iOS 14.4),最终对我有效:
两个间隔符都用于垂直居中文本字段
仅使用GeometryReader或ignoresSafeArea修改器并没有起到作用,但在将它们按上图所示组合在一起后,最终阻止了视图在键盘外观上向上移动。最终对我起作用的是,结合此处发布的答案并考虑以下内容(Xcode 12.4,iOS 14.4):
两个间隔符都用于垂直居中文本字段
仅使用GeometryReader或ignoresSafeArea
修饰符并没有起到作用,但在将它们按上图所示组合在一起后,最终阻止了视图在键盘外观上向上移动。为什么要取消该行为?如果您不提升文本字段,它会被键盘覆盖,您无法分辨您正在键入的内容,或者使用点击/拖动手势来更改选择。这使得编辑无法使用。你为什么要摆脱这种行为?如果您不提升文本字段,它会被键盘覆盖,您无法分辨您正在键入的内容,或者使用点击/拖动手势来更改选择。这使得编辑无法使用。修改器根本不起作用。文本字段仍向上移动..:(可能您错过了最初的代码实现。我添加了一个完整的代码演示以使其可复制;)如果我在视图中包含一些行,如下所示:ScrollView{LazyVStack{rows…}
使用ignoresSafeArea
将导致行中闪烁,这是明显的,并且使修改器无法工作。文本字段仍向上移动..:(可能您错过了最初的代码实现。我添加了一个完整的代码演示以使其可复制;)如果我在视图中包含一些行,如下所示:ScrollView{LazyVStack{rows…}
使用ignoresSafeArea
将导致行中闪烁,这是显而易见的,并且会使您感到烦恼。如果您使用此修改器,则它将无法工作。(.edgesIgnoringSafeArea(.all))如果你有这个修改器,它就不起作用了。(.边缘识别安全区域(.all))
GeometryReader { _ in
VStack {
Spacer()
TextField("Type something...", text: $value)
Spacer()
}.ignoresSafeArea(.keyboard, edges: .bottom)
}