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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 00:20:44