我在视图中使用TextField,当它成为第一个响应者时,它会离开视图,如下面的GIF所示。
有什么方法可以让我摆脱这种行为吗?
这是我的代码
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)")
}
}
}
5条答案
按热度按时间s4n0splo1#
要使
.ignoresSafeArea
工作,您需要填充所有可用区域(例如:通过使用Spacer
)。以下将不起作用(没有Spacers,只有TextField):
但是,当您添加Spacers(填充所有可用空间)时,它将工作:
如果你不想使用Spacers,你也可以使用
GeometryReader
:hiz5n14c2#
您应该对
ZStack
应用修改器,而不是NavigationView
完整工作示例:
ugmeyewa3#
结合这里发布的答案并考虑this question,最终对我起作用的是以下内容(Xcode 12.4,iOS 14.4):
这两个间隔符都是用来垂直居中文本字段的。
只使用GeometryReader或
ignoresSafeArea
修改器并不能完成这个任务,但是如上所示将它们放在一起之后,最终会阻止视图在键盘出现时向上移动。a7qyws3x4#
这就是我想出来的
它似乎为我工作。在这种情况下,您不需要检查iOS 14的可用性。
gc0ot86w5#
当我在里面使用NavigationView和Stacks时,我有一个案例,有几个本地“内容”视图。我遇到了和作者一样的麻烦。我的解决方案- GeometryReader但非常重要-在NavigationView里面!代码如下:
我希望这对某人有帮助。