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

为何使用.fullScreenCover后键盘上的Toolbar会消失?

问题原因及修复方案

核心问题在于:.fullScreenCover 弹出的模态视图默认不与系统键盘工具栏的渲染逻辑绑定,这和 NavigationStack 的视图层级特性直接相关。

为什么会这样?

  • NavigationStack 中的视图属于应用导航栈的一部分,系统会自动将视图的键盘工具栏与导航框架关联,键盘弹出时能自动加载对应的工具栏。
  • 而 .fullScreenCover 是独立于原导航栈的模态容器,它的视图层级和主导航栈完全分离,系统默认不会为这类模态视图启用键盘工具栏的关联机制。

两种修复方式

1. 给模态视图嵌套独立的 NavigationStack

把你的统计视图包裹在一个新的 NavigationStack 里,再通过 .fullScreenCover 展示:

.fullScreenCover(isPresented: $showStatsView) {
    NavigationStack {
        YourStatsView() // 包含TextEdit和键盘工具栏的统计视图
    }
}

这样系统会将模态视图纳入导航框架管理,键盘工具栏就能正常显示。

2. 显式指定工具栏角色

如果不想嵌套导航栈,可以在统计视图的工具栏修饰符中添加 role: .editor,强制系统识别这是编辑器场景下的键盘工具栏:

.toolbar(role: .editor) {
    ToolbarItemGroup(placement: .keyboard) {
        Button("上一个") { /* 焦点切换逻辑 */ }
        Button("下一个") { /* 焦点切换逻辑 */ }
    }
}

关于之前的无限循环问题

你之前用 NavigationStack 出现的无限循环,大概率是 navigationDestination 的绑定逻辑有问题——比如在视图初始化时意外修改了导航触发的状态变量,导致视图反复重建。如果后续想换回 NavigationStack,可以检查:

  • 确保 navigationDestination 的触发条件是稳定的状态变量,不要在视图初始化代码里修改导航绑定的 Bool 或可哈希状态
  • 避免在 navigationDestination 跳转后的视图中再次触发相同的导航动作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 04:35:07