切换回搜索栏激活时,标签栏视图变为空白

Jas*_*son 10 uitabbarcontroller ios swift uisearchcontroller

更新2:

由于人们仍在关注这个问题:知道我意识到在一个实际的,孤立的iOS设备上复制这个bug是不可能的.当您呈现搜索控制器时,iOS也会显示一个键盘,它覆盖了标签栏.要切换标签,您必须关闭键盘,这也将关闭搜索控制器.

我说"隔离"的原因是因为我不知道你是否可以用蓝牙键盘复制这个并且没有人试试.iOS键盘可能无法连接外接键盘


更新:

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

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


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

                   /-> Navigation Controller -> View 1
tab bar controller 
                   \-> Navigation Controller -> View 2
Run Code Online (Sandbox Code Playgroud)

这通常很好.但是,View 1有一个UISearchController.问题是,如果单击搜索按钮,则会显示搜索控制器.如果然后单击选项卡栏中的"查看2"并切换回"视图1",则搜索控制器仍然存在且视图为黑色.

我目前的hacky"修复"是在搜索栏显而易见时禁用标签栏,如果用户选择"取消"则重新启用它.这有两个问题:

  1. 这是jank; 用户应该能够随时切换标签
  2. 它仅在用户点击取消时重新启用,而不是仅仅点击搜索

我怎样才能解决这个问题?这是我正在谈论的图片

在此输入图像描述

在此输入图像描述

在此输入图像描述

在此输入图像描述

toa*_*ast 13

我通过以下答案解决了这个问题: UISearchController导致黑屏Swift 2.0

我这样实现了viewDidLoad:

    self.definesPresentationContext = true

    searchController.searchResultsUpdater = self
    searchController.searchBar.delegate = self
    searchController.dimsBackgroundDuringPresentation = false
    searchController.definesPresentationContext = true
Run Code Online (Sandbox Code Playgroud)

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

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