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

SwiftUI键盘工具栏消失:底部布局TextField无法关闭问题排查

问题分析与解决方案

工具栏消失的核心原因

  1. 代码遗漏(最可能)
    SwiftUI的TextField默认不会自动生成带Done按钮的键盘工具栏,你之前能看到工具栏,说明代码里曾有.toolbar或.keyboardToolbar修饰符,后来被误删或修改了。这是此类问题最常见的诱因。

  2. 设备/键盘设置(概率低)

  • 如果你切换到了第三方键盘,部分第三方键盘本身没有内置Done按钮工具栏;
  • 系统设置中极少会默认隐藏键盘工具栏,除非手动修改了键盘辅助功能选项,但这种情况非常罕见。
  1. 布局容器的间接影响
    你的TextField放在底部的VStack/ScrollView中,这类容器本身不会导致工具栏消失,但如果ScrollView设置了scrollDismissesKeyboard(.immediately),只会改变滑动关闭键盘的逻辑,和工具栏显示无关;若存在视图覆盖键盘的情况,会导致键盘被遮挡而非工具栏消失。

恢复工具栏的解决代码

根据iOS版本选择对应的写法:

iOS 16+ 推荐写法

TextField("comment...", text: $textToPost)
    .keyboardType(.alphabet)
    .padding(.leading, 20)
    .lineLimit(0)
    .focused($focusField, equals: .comment)
    .keyboardToolbar {
        ToolbarItem(placement: .keyboard) {
            Button("Done") {
                focusField = nil // 点击Done失去焦点,关闭键盘
            }
        }
    }

兼容iOS 15及以下的写法

TextField("comment...", text: $textToPost)
    .keyboardType(.alphabet)
    .padding(.leading, 20)
    .lineLimit(0)
    .focused($focusField, equals: .comment)
    .toolbar {
        ToolbarItem(placement: .keyboard) {
            Button("Done") {
                focusField = nil
            }
        }
    }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 10:20:48