UISearchController 使 UITableView 的内容变黑

Posted

技术标签:

【中文标题】UISearchController 使 UITableView 的内容变黑【英文标题】:UISearchController makes content of the UITableView black 【发布时间】:2016-08-29 06:10:39 【问题描述】:

UISearchController 与 UITabBarController 结合使用时出现问题。我有 3 个标签。在每个选项卡中,我都有一个 UITableViewController 和一个来自 UISearchController 的搜索栏设置为表视图的标题视图,如下所示。

searchController = UISearchController(searchResultsController: nil)
searchController.searchResultsUpdater = self
searchController.dimsBackgroundDuringPresentation = false
searchController.hidesNavigationBarDuringPresentation = true
tableView.tableHeaderView = searchController.searchBar
tableView.contentOffset = CGPointMake(0, CGRectGetHeight(searchController.searchBar.frame))

如果我开始搜索并切换到另一个选项卡而不取消搜索,然后返回到上一个选项卡,则 UITableView 的内容变为黑色。我已经阅读了多个帖子,例如UISearchController makes the controller black 或UISearchController causes black screen Swift 2.0。但是这些解决方案对我不起作用。如果我在设置

definesPresentationContext = true

那么问题首先出现。如果我省略这一行,那么表格视图的内容不会变黑,但搜索栏在下一个选项卡上的搜索状态下保持激活状态。我也尝试将 searchResultsController 设置为另一个 UITableViewController 但它也没有解决问题。

【问题讨论】:

您是否尝试过在用户移动到另一个选项卡时以编程方式取消搜索? 【参考方案1】:

我也遇到了同样的问题,只需在viewDidDisappear 中添加以下行即可解决

    self.searchController.active = false 

通常你获取这个属性的值来判断是否显示搜索结果。但是,您可以将此属性设置为 true 以强制显示搜索界面,即使用户没有在搜索字段中点击。

此属性的默认值为 false。

从上面的描述中可以清楚地看出,如果用户与searchController 交互,默认值是false,它会切换为true。 在我们的例子中,只有当我们在UISearchController 处于活动状态时切换选项卡时才会出现问题。因此,我们需要在切换到其他 VC 时以编程方式简单地停用。

【讨论】:

我也将此解决方案用作解决方法。但它有两个缺点。首先,如果用户单击单元格然后返回,则搜索结果将被重置。其次,搜索栏停用的动画持续时间与切换标签不同。因此,如果切换选项卡,搜索栏仍会显示片刻。 如果您对UISearchBar 没有任何问题,那就去吧。不会造成这种问题。

以上是关于UISearchController 使 UITableView 的内容变黑的主要内容,如果未能解决你的问题,请参考以下文章

UISearchController 使 UITableView 的内容变黑

使 UISearchController 搜索栏自动激活

UISearchController 使控制器变黑

如何使用 UISearchController 使导航栏保持可见?

以编程方式显示 UISearchController 的搜索栏

聚焦时如何调整 UISearchController.searchBar 的大小问题?