我有一个视图,其中包含一些文本框。选择顶部的文本框会导致键盘避让,将所有内容推上去以保持底部的文本框可见。在这种情况下,它会将“Input 1”文本推到导航栏上面的顶部文本框中,将其隐藏。
struct Settings: View {
@State private var input1: String = ""
@State private var input2: String = ""
@State private var input3: String = ""
@State private var input4: String = ""
@State private var input5: String = ""
init() {
let coloredAppearance = UINavigationBarAppearance()
coloredAppearance.configureWithTransparentBackground()
coloredAppearance.backgroundColor = .gray
UINavigationBar.appearance().standardAppearance = coloredAppearance
UINavigationBar.appearance().compactAppearance = coloredAppearance
UINavigationBar.appearance().scrollEdgeAppearance = coloredAppearance
}
var body: some View {
NavigationView {
VStack(spacing: 16) {
Group {
VStack {
Text("Input 1")
.frame(maxWidth: .infinity, alignment: .leading)
TextField("", text: $input1)
.disableAutocorrection(true)
.padding()
.overlay(RoundedRectangle(cornerRadius: 5).stroke(.gray))
}
}
Group {
VStack {
Text("Input 2")
.frame(maxWidth: .infinity, alignment: .leading)
TextField("", text: $input2)
.disableAutocorrection(true)
.padding()
.overlay(RoundedRectangle(cornerRadius: 5).stroke(.gray))
}
}
Group {
VStack {
Text("Input 3")
.frame(maxWidth: .infinity, alignment: .leading)
TextField("", text: $input3)
.disableAutocorrection(true)
.padding()
.overlay(RoundedRectangle(cornerRadius: 5).stroke(.gray))
}
}
Group {
VStack {
Text("Input 4")
.frame(maxWidth: .infinity, alignment: .leading)
TextField("", text: $input4)
.disableAutocorrection(true)
.padding()
.overlay(RoundedRectangle(cornerRadius: 5).stroke(.gray))
}
}
Spacer()
}
.navigationBarTitle("Header", displayMode: .inline)
}
.ignoresSafeArea()
}
}
有没有办法防止这种情况?我尝试过使用空白符,但没有成功。虽然这可能会使文本可见,但当键盘未打开时,它会在导航栏和文本之间创建一个空间。我还尝试了对ignoresSafeArea(.keyboard)
进行更改。
理想情况下,如果选择了顶部文本字段,则键盘应覆盖底部文本字段,而不会推动任何内容。我只希望在必要时将内容向上推以保持当前选定的文本字段可见。有谁知道如何做到这一点吗?先感谢您。