SwiftUI中页面dismiss时键盘无法正常收起残留高度问题
问题原因
这个键盘背景残留是iOS页面过渡动画和键盘收起动画冲突导致的,你在页面onDisappear阶段才触发键盘收起,此时页面已经开始退出视图层级,全局endEditing调用没有正确触发系统的键盘容器回收逻辑,仅隐藏了按键区域,没有释放键盘占据的高度空间。
修复步骤
- 第一步:修改
CustomTxtfldForFollowerScrn中updateUIView的放弃第一响应逻辑,优先让当前输入框自身释放第一响应者,同时重置状态避免下次进入页面无法正常弹出键盘:
else if !isFirstResponder { DispatchQueue.main.async { uiView.resignFirstResponder() context.coordinator.didBecomeFirstResponder = false } }
- 第二步:在页面
onDisappear中直接触发全局结束编辑,不要依赖绑定值更新触发的回调,避免视图层级变化后回调不执行:
.onDisappear{ updateKeyboard = false UIApplication.shared.endEditing() }
- 可选优化:如果还有偶现残留,可以给
NavigationView添加.ignoresSafeArea(.keyboard, edges: .bottom)修饰符,让页面不监听键盘高度变化,避免过渡阶段高度计算异常。
内容的提问来源于stack exchange,提问作者Sham Dhiman
相关产品推荐
相关产品推荐

