Ada*_*ger 6 ios swift swiftui ios16
TextField
如果它是常规的(即不在 上扩展的axis
),无论它是否包含在 a 中,自动键盘避免似乎都能正常工作。ScrollView
如果只是将TextField(_:text:axis)
其简单地放置在 a 中VStack
而不是包装在ScrollView
. 随着更多文本的高度扩展,它甚至会继续正确地避开键盘。
TextField(_:text:axis)
但如果它被放置在一个内部,我似乎无法避免使用键盘ScrollView
我可以采用一种老套的方法,即当焦点被聚焦时,使用ScrollViewReader
与 组合DispatchQueue.main.asyncAfter(deadline: .now() + .milliseconds(400))
来包裹。当您第一次聚焦该领域时,这种方法有效,但我似乎无法在扩展时继续调整其位置。proxy.scrollTo()
TextField
ScrollView
TextField
这是一个例子:
struct KeyboardAvoidingView: View {
@State var text = ""
var body: some View {
ScrollViewReader { proxy in
ScrollView {
VStack {
Color.red
.frame(height: 400)
Color.blue
.frame(height: 400)
TextField("Name", text: $text, axis: .vertical)
.padding(.vertical)
.onTapGesture {
DispatchQueue.main.asyncAfter(deadline: .now() + .milliseconds(400)) {
withAnimation(.default) {
proxy.scrollTo(0)
}
}
}
.onChange(of: text) { newValue in
proxy.scrollTo(0) // This doesn't seem to do anything
}
Spacer()
.frame(height: 0)
.id(0)
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想我想知道这是预期的行为还是错误。不管是其中之一,我想知道是否可以在滚动视图内有一个自动扩展的文本字段,即使字段的高度扩展,我也可以避免使用键盘?
更新:事实证明,问题在于将a而不是 a放在TextField
里面。我认为在某些情况下不知道如何处理普通人。如果我在示例中将替换为 a ,一切都会按预期进行!VStack
LazyVStack
ScrollView
VStack
VStack
LazyVStack
归档时间: |
|
查看次数: |
617 次 |
最近记录: |