Swift tvOS开发如何阻止UISearchController的UIKeyboard自动收起引发结果视图滚动
tvOS UISearchController滚动时键盘自动收起异常修复方案
方案1:使用系统原生属性控制(适配tvOS 15.0+)
tvOS 15及以上版本UISearchController原生提供键盘自动收起控制开关,直接设置即可覆盖默认逻辑:
searchController.automaticallyDismissesKeyboard = .never
该属性优先级最高,无需额外修改其他代理即可完全阻止滚动时的键盘自动收起行为
方案2:修改结果页滚动视图的键盘触发配置
如果自定义searchResultsController内包含UIScrollView及其子类(UITableView/UICollectionView等),修改其键盘收起模式:
// 替换为你自定义结果页内的滚动视图实例 resultTableView.keyboardDismissMode = .none resultCollectionView.keyboardDismissMode = .none
滚动视图默认keyboardDismissMode为.onDrag,会在拖动滚动时自动触发键盘收起,修改为.none后滚动不会触发键盘消失逻辑
方案3:低版本系统兼容处理
如果需要适配tvOS 15以下版本,实现结果页内滚动视图的UIScrollViewDelegate代理方法:
func scrollViewShouldEndEditing(_ scrollView: UIScrollView) -> Bool { // 返回false禁止滚动时触发结束编辑,避免键盘被主动收起 return false }
如需保留特定场景下的键盘收起能力,可在该方法内添加自定义判断逻辑。
异常排查补充
如果以上方案不生效,排查项目中是否有其他业务逻辑主动调用了searchController.searchBar.resignFirstResponder(),也可在必要时主动保持搜索框的第一响应者状态:
// 滚动结束后判断是否需要重新激活搜索框 if searchController.isActive, !searchController.searchBar.isFirstResponder { searchController.searchBar.becomeFirstResponder() }
内容的提问来源于stack exchange,提问作者Alaa DAIRY
相关产品推荐
相关产品推荐

