iOS15设备上SwiftUI TextField软键盘返回键触发异常跳转问题
问题根因
这是iOS15版本SwiftUI的已知系统bug,由系统对导航栏布局、TextField键盘返回事件的处理逻辑变更导致:
- 日志中
Unbalanced calls to begin/end appearance transitions提示说明点击软键盘返回键时,系统误触发了导航栈的pop返回操作,才会跳转到其他视图 - 附带的布局约束报错是iOS15导航栏内部的系统级问题,和开发者的自定义布局代码无关,iOS15.1及以上系统版本已经修复了该警告
可行解决方案
方案1:手动拦截返回键事件,主动收起键盘
给你的TextField添加onSubmit修饰符,监听到返回键点击时主动收起键盘,拦截系统默认事件冒泡:
TextField("Search product", text: $searchableText) .font(.system(size: 16)) .padding([.top, .bottom]) .keyboardType(.default) // 新增以下代码 .onSubmit { UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil) }
方案2:临时禁用当前页的交互式返回手势
如果方案1不生效,可以在当前页面出现时禁用导航栈的侧滑返回手势,页面销毁时再恢复,避免误触发pop操作:
// 页面的onAppear和onDisappear修饰符 .onAppear { UINavigationController.appearance().interactivePopGestureRecognizer?.isEnabled = false } .onDisappear { UINavigationController.appearance().interactivePopGestureRecognizer?.isEnabled = true }
如果你的项目使用了自定义导航控制器,直接修改对应实例的手势属性即可。
额外说明
如果仅需要解决约束警告,不需要做额外修改,升级系统到iOS15.1及以上版本警告会自动消失,不会影响App的提审和正常功能使用。
内容的提问来源于stack exchange,提问作者Mahmudur Rahman
相关产品推荐
相关产品推荐

