bounty将在3天后过期。此问题的答案可获得+50声望奖励。fs_tigre正在寻找此问题的更详细答案:我想知道这是否是一个错误,如果有一个修复它,因为我不能找到任何答案在网上。我想知道其他人如何管理这种情况时,他们有很多文本字段。
如果前一个字段使用的是普通键盘,那么为什么Field 3
和Field 5
在活动时不可见呢?
在下面的代码中,如果点击Field 1
,并且在点击Field 3
或Field 5
之后立即点击,则它们将不可见;它们被键盘隐藏了。
请注意,Field 3
和Field 5
使用decimalPad
键盘,而其余字段使用标准键盘。
struct TextFieldScrollingIssue: View {
@State private var testInput:String = ""
var body: some View {
VStack{
Form {
TextField("Field 1", text:$testInput)
Spacer()
Spacer()
Spacer()
Spacer()
Spacer()
Spacer()
Spacer()
Section(header: Text("Section 1: ")) {
TextField("Field 2", text:$testInput)
TextField("Field 3", text:$testInput)
.keyboardType(.decimalPad)
}
Section(header: Text("Section 2: ")) {
TextField("Field 4", text:$testInput)
TextField("Field 5", text:$testInput)
.keyboardType(.decimalPad)
}
}
}
}
}
2条答案
按热度按时间qgelzfjb1#
我认为滚动机制是混乱的,因为您对所有
TextFields
使用了相同的变量。显然,在生产中,您永远不会遇到这种情况。修复方法很简单,使用不同的变量:编辑:
根据评论,我能够重现。编辑代码使用一个
ScrollviewReader
,@FocusState
和视图id来纠正。kwvwclae2#
问题是,当你点击字段3或字段5时,键盘会出现并将表单内容向上推。由于字段3和字段5位于表单的底部,它们被键盘遮住了。有几种方法可以解决这个问题
使用ScrollView Package 窗体并将
.keyboardDismissMode
设置为.interactive
。这将允许用户通过向下滑动ScrollView来关闭键盘。将窗体 Package 为
GeometryReader
,并使用其safeAreaInsets
调整键盘出现时窗体的偏移使用
KeyboardResponder
类侦听键盘事件,并在键盘出现时调整窗体的偏移量: