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

UISearchController的searchResultsController.view.isHidden与showsSearchResultsController的区别

UISearchController中searchResultsController.view.isHidden与showsSearchResultsController的本质区别

在iOS开发中使用UISearchController时,尝试通过直接设置searchResultsController?.view.isHidden控制搜索结果控制器的显示隐藏,会出现偶尔设置为true后视图仍不隐藏的异常。改用showsSearchResultsController属性控制(设为!$0)后,功能恢复正常——即便两种方式的打印结果都显示view.isHidden已经被设置为预期值。

初始失效代码

isHidden
  .asDriver(onErrorJustReturn: true)
  .drive(onNext: { [weak self] in
     print("isHidden Before \($0) \(self?.searchController.searchResultsController?.view.isHidden)")
     self?.appSearchController.searchResultsController?.view.isHidden = $0
     print("isHidden After \($0) \(self?.searchController.searchResultsController?.view.isHidden)")
  })
  .disposed(by: disposeBag)

修复后正常代码

isHidden
  .asDriver(onErrorJustReturn: true)
  .drive(onNext: { [weak self] in
     print("isHidden Before \($0) \(self?.searchController.searchResultsController?.view.isHidden)")
     self?.appSearchController.showsSearchResultsController = !$0
     print("isHidden After \($0) \(self?.searchController.searchResultsController?.view.isHidden)")
  })
  .disposed(by: disposeBag)

两种代码的打印输出

isHidden Before false Optional(false)
isHidden After false Optional(true)

本质区别

1. 直接设置view.isHidden:视图层的临时修改

  • 这只是对单个视图可见性的直接修改,完全绕过了UISearchController的内部状态管理逻辑。
  • UISearchController自身维护着搜索状态(如搜索激活、输入变化),在一些内部触发的时机(比如搜索框文本更新、搜索状态切换),它会自动重置searchResultsController视图的显示状态,直接覆盖你手动设置的isHidden值。
  • 从打印结果能看到,代码执行后view.isHidden确实被设为true,但UISearchController内部并没有同步这个状态,后续的内部逻辑会把视图重新显示出来,导致你的设置失效。

2. 使用showsSearchResultsController:控制器层面的状态控制

  • 这是UISearchController官方提供的状态控制属性,属于控制器级别的API,用于统一管理搜索结果控制器的显示状态。
  • 设置该属性时,UISearchController会同步更新自身内部状态,同时处理视图的显示/隐藏、布局调整,还会触发searchResultsController对应的生命周期方法(如viewWillAppear/viewWillDisappear)。
  • 它会和UISearchController的其他状态(如搜索激活状态)保持一致,不会被内部逻辑随意覆盖,因为这是框架定义的标准控制入口,所有相关的状态变更都会通过这个属性来同步。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 14:02:43