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

SwiftUI键盘Toolbar首次不显示,切后台再前台才出现的问题

解决SwiftUI键盘Toolbar延迟显示问题

问题核心在于SwiftUI的键盘工具栏需要依托导航容器(NavigationStack/NavigationView)的环境才能正确初始化,直接绑定到TextField上时,新页面加载阶段可能未完成工具栏的注册逻辑,导致首次唤起键盘时不显示,切换后台再前台触发视图重绘后才正常加载。

修复方案:

将页面嵌入导航容器,并把toolbar修饰符绑定到导航容器层级,而非直接加在TextField上:

iOS 16+ 写法(使用NavigationStack)

@FocusState private var isFocused: Bool
@State private var name = ""

var body: some View {
    NavigationStack {
        TextField("Name", text: $name)
            .frame(width: .infinity, height: 40)
            .padding(.all)
            .focused($isFocused)
    }
    .toolbar {
        ToolbarItemGroup(placement: .keyboard) {
            Spacer()
            Button("Done") {
                isFocused = false
            }
        }
    }
}

iOS 15及以下写法(使用NavigationView)

@FocusState private var isFocused: Bool
@State private var name = ""

var body: some View {
    NavigationView {
        TextField("Name", text: $name)
            .frame(width: .infinity, height: 40)
            .padding(.all)
            .focused($isFocused)
    }
    .toolbar {
        ToolbarItemGroup(placement: .keyboard) {
            Spacer()
            Button("Done") {
                isFocused = false
            }
        }
    }
}

原理说明:

导航容器会为页面提供完整的UI环境上下文,将toolbar绑定到导航容器层级后,页面初始化时就能完成键盘工具栏的注册,确保首次唤起键盘时工具栏同步显示,无需依赖后台切换触发的视图重绘。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 21:49:57