MessageKit:关闭MessagesViewController时messageInputBar未消失求助
解决MessageKit中messageInputBar返回后残留的问题
问题场景
使用MessageKit框架开发,自定义MessagesViewController,手动添加导航栏和返回按钮,并将messageInputBar作为子视图加入页面。出现以下异常:
- 点击
messageInputBar的输入框后,再点击返回按钮关闭当前控制器,messageInputBar会残留在上一页面的屏幕上 - 未点击输入框直接返回时,输入栏能正常消失
问题原因
点击输入框后,输入文本框成为第一响应者并弹出键盘,此时messageInputBar的显示状态与键盘绑定。返回时未主动触发键盘收起、让输入框失去第一响应者,导致输入栏状态未被正确重置,即使控制器被关闭,输入栏仍会因层级或状态残留问题显示在上一页面。
解决方案
在返回按钮的点击事件中,先强制收起键盘并重置输入栏状态,再执行关闭操作。同时优化输入栏的约束设置,避免尺寸适配问题。
修改后的返回按钮代码:
@IBAction func backButtonTapped(_ sender: Any) { // 强制收起键盘,让输入框失去第一响应者 messageInputBar.inputTextView.resignFirstResponder() view.endEditing(true) let transition = CATransition() self.view.window!.layer.add(transition.segueLeftToRight(), forKey: kCATransition) self.dismiss(animated: false) }
额外约束优化建议
将messageInputBar的宽度约束从固定值改为与父视图左右边界绑定,避免设备旋转或尺寸变化时出现适配异常:
NSLayoutConstraint.activate([ messageInputBar.bottomAnchor.constraint(equalTo: self.view.bottomAnchor), // 替换原固定宽度约束,改为与父视图左右对齐 messageInputBar.leadingAnchor.constraint(equalTo: self.view.leadingAnchor), messageInputBar.trailingAnchor.constraint(equalTo: self.view.trailingAnchor) ])
内容的提问来源于stack exchange,提问作者BiggRojo
相关产品推荐
相关产品推荐

