ios UISearchController.searchResultsController?.view.isHidden和UISearchController.showsSearchResultsController之间的区别

izj3ouym  于 2023-04-08  发布在  iOS
关注(0)|答案(1)|浏览(133)

我目前正在使用UISearchController,我发现了UISearchController的一些尴尬行为。
以前我不知道有showsSearchResultsController属性可以帮助我隐藏searchResultsController。所以我尝试使用searchResultsController?.view.isHidden来管理它。但我发现很少有情况下,我将true分配给searchResultsController?.view.isHidden,视图不会隐藏。
然而,当我使用showsSearchResultsController并将false分配给它时,searchResultsController就像我想要的那样。
第一个代码是我最初使用的代码(发生故障)。
第二个代码是我修复的代码(工作正常)。

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)

在这两种情况下,print的输出都是

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

通过使用showsSearchResultsController,我已经解决了这个问题,但是我真的想知道两者之间的区别。在我看来,我认为两个代码看起来很相似。分享想法对我很有帮助。

gopyfrb3

gopyfrb31#

使用showsSearchResultsController属性是更好的方法。它是UISearchController提供的公共API的一部分。设置该属性允许搜索控制器做任何它认为合适的事情来显示/隐藏搜索结果。这可能不仅仅是简单地显示/隐藏视图。
当你做类似searchResultsController?.view.isHidden = someBool的事情时,你正在挖掘搜索控制器的(可以说)私有子结构。你绕过了公共API。你可能会失去使用showsSearchResultsController提供的公共API所获得的一些细微差别或技巧。
iOS的未来版本可能会改变UISearchController和搜索结果视图的外观和感觉。通过使用公共API,您的代码应该可以继续正常运行。直接挖掘搜索控制器视图的内部可能会导致错误的行为或糟糕的用户界面。

相关问题