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

iPad中UISearchBar激活后inputAccessoryView隐藏且无法恢复问题

iPad上UISearchBar编辑后inputAccessoryView无法恢复显示的问题解决

问题描述

在iPad设备上,激活UISearchBar进入编辑状态后,inputAccessoryView会被隐藏;即使结束UISearchBar的编辑状态,该视图也无法自动重新显示。

问题复现步骤

  • 激活UISearchBar开始编辑
  • 取消UISearchBar的编辑状态
  • 对比编辑前后inputAccessoryView的可见性

解决方案

方法一:监听编辑通知恢复视图

利用编辑结束通知,延迟执行视图恢复逻辑,适配键盘收起的动画周期:

override func viewDidLoad() {
    super.viewDidLoad()
    // 绑定搜索栏文本编辑结束通知
    NotificationCenter.default.addObserver(
        self,
        selector: #selector(restoreInputAccessoryView),
        name: UITextField.textDidEndEditingNotification,
        object: searchBar.searchTextField
    )
}

@objc private func restoreInputAccessoryView() {
    // 延迟0.1秒执行,确保键盘完全收起
    DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
        // 重新设置inputAccessoryView并触发状态更新
        self.inputAccessoryView = self.customAccessoryView // 替换为你的自定义视图实例
        self.becomeFirstResponder()
        self.resignFirstResponder()
    }
}

deinit {
    // 销毁时移除通知监听,避免内存泄漏
    NotificationCenter.default.removeObserver(self)
}

方法二:通过UISearchBar代理处理

实现代理协议,在编辑结束回调中强制恢复视图显示:

extension YourViewController: UISearchBarDelegate {
    func searchBarTextDidEndEditing(_ searchBar: UISearchBar) {
        guard let accessoryView = self.inputAccessoryView else { return }
        
        // 强制显示并更新布局
        accessoryView.isHidden = false
        self.view.layoutIfNeeded()
        // 重新赋值触发系统更新视图层级
        self.inputAccessoryView = accessoryView
    }
}

问题原因

这是iPad平台上UISearchBar的已知系统行为问题:当搜索栏激活键盘时,系统会临时移除当前视图的inputAccessoryView,但在编辑状态结束、键盘收起后,未自动将该视图恢复到原层级中。

内容的提问来源于stack exchange,提问作者Rajat Mishra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 23:29:57