You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI List切换默认键盘至decimalPad时意外下滚导致聚焦输入框被遮挡的问题求助

SwiftUI List切换默认键盘至decimalPad时意外下滚导致聚焦输入框被遮挡的问题求助

各位SwiftUI开发者们,求助!我最近碰到一个超闹心的问题:在SwiftUI的List组件里,当TextField从默认键盘切换到decimalPad类型的键盘时,List会毫无理由地向下滚动,结果就是当前正聚焦的输入框直接被键盘给挡住了,完全没法正常输入和查看内容。

我贴一下目前的代码片段,大家帮我看看哪里出问题了:

struct ListTextField: View {
    @State private var focusedFieldID: Int?
    @FocusState private var focusedField: Int?

    var body: some View {
        ScrollViewReader { proxy in
            List {
                ForEach(0 ..< 12) { index in
                    Group {
                        TextField("输入项 \(index)", text: .constant(""))
                            .focused($focusedField, equals: index)
                            .keyboardType(index % 2 == 0 ? .default : .decimalPad)
                            .onTapGesture {
                                focusedField = index
                                focusedFieldID = index
                                // 本来想用ScrollViewReader定位,但好像没效果
                                proxy.scrollTo(index, anchor: .center)
                            }
                    }
                }
            }
        }
    }
}

我本来想着用ScrollViewReader来手动控制滚动位置,确保聚焦的输入框能显示出来,但试了之后发现完全没起作用,切换键盘的时候List还是会自己乱滚。有没有大佬遇到过类似的情况?求指点一下怎么解决这个问题,感激不尽!

备注:内容来源于stack exchange,提问作者arterzz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 06:39:28