更新2:
由于人们仍然在关注这个问题:知道我意识到在一个实际的,孤立的iOS设备上复制这个bug是不可能的.当您呈现搜索控制器时,iOS也会显示一个键盘,其中包含标签栏.要切换标签,您必须关闭键盘,这也将关闭搜索控制器.
我说“隔离”的原因是因为我不知道你是否可以用蓝牙键盘复制这个并且没有人试试. iOS键盘可能无法连接外接键盘
更新:
我向View 1添加了一个viewWillDisappear覆盖,并发现了一些有趣的结果:
当搜索栏不存在时,切换选项卡会在加载下一个视图之前关闭视图.但是,当存在搜索栏时,在加载下一个视图之前不会关闭视图
我在根目录下有一个标签栏控制器,它有2个标签.每个都进入导航控制器,将设备带到视图.这是一个粗略的图表:
/-> Navigation Controller -> View 1 tab bar controller \-> Navigation Controller -> View 2
这通常很好.但是,View 1有一个UISearchController.问题是,如果单击搜索按钮,则会显示搜索控制器.如果然后单击选项卡栏中的“查看2”并切换回“视图1”,则搜索控制器仍然存在且视图为黑色.
我目前的hacky“修复”是在搜索栏显而易见时禁用标签栏,如果用户选择“取消”则重新启用它.这有两个问题:
解决方法
我通过以下答案解决了这个问题:
UISearchController causes black screen Swift 2.0
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)