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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 13:45:03