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

SwiftUI中List与键盘、安全区域相关的视觉Bug问题

SwiftUI List 搭配 TextField 时的聚焦取消视觉卡顿问题

问题现象

在 iOS 16.0 和 16.1 版本中,使用 SwiftUI 的 List 嵌套 TextField 时会出现视觉 Bug:

  • 聚焦任意 TextField 后取消焦点(通过列表行内按钮、键盘工具栏等方式),键盘后方的黑色视图会先消失,但安全区域上方的对应部分会卡顿约一秒后突然消失,导致动画不流畅。
  • 若滚动到 List 底部执行相同操作,黑色视图卡顿消失后还会引发 List 轻微“跳变”,彻底破坏动画连贯性。

最小复现代码

struct ContentView: View {
    
    @State var text: String = ""
    
    @FocusState private var focused: Int?
    
    var body: some View {
        List {
            ForEach(0..<50) { item in
                HStack {
                    TextField("", text: $text)
                        .id(item)
                        .focused($focused, equals: item)
                        .background(.white)
                    
                    Button {
                        focused = nil
                    } label: {
                        Text("Hide")
                    }
                }
            }
        }
        .scrollContentBackground(.hidden)
        .background(.red)
    }
}

已尝试的无效方案

  • 将 List 放入 VStack 并在下方添加额外视图:不符合原有 UI 设计需求
  • 替换为 ScrollView:键盘消失后,键盘避让产生的底部额外留白需要手动滚动才会消失,引入新问题
  • 忽略 List/ScrollView 的安全区域:虽能解决卡顿,但会直接禁用键盘避让功能,无法满足需求

修复说明

该视觉 Bug 在 iOS 16.5 及对应的 Xcode 版本中已被官方修复。

内容的提问来源于stack exchange,提问作者MattGreeny

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 22:10:32