iOS11 SearchController - 从 navigationItem 中移除 SearchBar 导致损坏 UI

iOS11 SearchController - SearchBar removal from navigationItem leaves broken UI

当我通过设置 'nil' 从 navigationItem 中删除 searchController 时。空的 space 留在原来的位置,而不是倒塌。

试过打电话,

searchController.dismiss()
navigationController.navigationItem.searchController.dismiss()
navigationItem.searchController.dismiss()
searchController.isActive = false

没有任何效果。


P.S - 使用模拟器

使用这个:

let search = UISearchController(searchResultsController: nil)

如果您要设置以下内容,请删除此行

self.navigationItem.searchController = search

您应该在删除搜索控制器后布局子视图。诀窍是你必须布局哪个超级视图的子视图:因为navigationItem是导航堆栈的一部分,所以你应该调用layoutSubviews()到当前navigationController:

navigationItem.searchController = nil
navigationController?.view.setNeedsLayout()
navigationController?.view.layoutIfNeeded()

根据 Apple 文档,您不应直接调用 layoutSubviews()