切换回搜索栏处于活动状态时,选项卡栏视图变为空白

Posted

技术标签:

【中文标题】切换回搜索栏处于活动状态时,选项卡栏视图变为空白【英文标题】:Tab bar view goes blank when switched back to with search bar active 【发布时间】:2016-08-08 19:12:45 【问题描述】:

更新 2:

由于人们仍在关注这个问题:知道我意识到不可能在实际的、隔离的 ios 设备上复制此错误。当你展示搜索控制器时,iOS 也会展示一个键盘,它覆盖标签栏。要切换标签,您必须关闭键盘,这也会关闭搜索控制器。

我说“孤立”的原因是因为我不知道您是否可以使用蓝牙键盘复制它并且没有可以尝试的。 iOS 键盘可能不会与连接的外部键盘一起显示


更新:

我在 View 1 中添加了 viewWillDisappear 覆盖并发现了一些有趣的结果:

当搜索栏不存在时,切换选项卡会在加载下一个视图之前关闭视图。但是,当存在搜索栏时,在加载下一个视图之前不会关闭视图


我在根目录有一个标签栏控制器,它有 2 个标签。每个都进入一个导航控制器,该控制器将设备带到视图。这是一个粗略的图表:

                   /-> Navigation Controller -> View 1
tab bar controller 
                   \-> Navigation Controller -> View 2

这正常工作。然而,View 1 有一个 UISearchController。错误在于,如果您单击搜索按钮,则会显示搜索控制器。如果您随后单击选项卡栏中的视图 2 并切换回视图 1,则搜索控制器仍然存在并且视图为黑色。

我当前的hacky“修复”是在搜索栏明显时禁用标签栏,如果用户选择“取消”则重新启用它。这有两个问题:

    卡顿了;用户应该能够随时切换标签 只有当用户点击取消时它才会重新启用,而不是当他们只是点击退出搜索时

我该如何解决这个问题?这是我在说什么的图片

【问题讨论】:

写在你的viewDidLoad方法中:self.definesPresentationContext = true 【参考方案1】:

我通过以下答案解决了这个问题: UISearchController causes black screen Swift 2.0

我在viewDidLoad中是这样实现的:

    self.definesPresentationContext = true

    searchController.searchResultsUpdater = self
    searchController.searchBar.delegate = self
    searchController.dimsBackgroundDuringPresentation = false
    searchController.definesPresentationContext = true

这几乎解决了我的问题。然后我遇到了另一个问题,试图在didSelectRowAt 上进行隔离,这在以前从来都不是问题。我通过首先弹出 UISearchController,然后正常执行 segue 解决了这个问题:

_ = self.navigationController?.popViewController(animated: true)

【讨论】:

以上是关于切换回搜索栏处于活动状态时,选项卡栏视图变为空白的主要内容,如果未能解决你的问题,请参考以下文章

使用搜索栏时无法使表格视图处于非活动状态。苹果手机

搜索栏处于活动状态时,状态栏图标变为黑色

搜索控制器处于活动状态时出现表格视图时隐藏的第一行

导航回父视图控制器时,UIButton 在选项卡栏后面 - iOS

当搜索栏处于活动状态时,快速表视图被锁定

连接到选项卡栏控制器时,TableView 不会切换到详细视图