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
相关产品推荐
相关产品推荐

