UINavigationBar 在解除 UISearchController 时覆盖 UITableView

Posted

技术标签:

【中文标题】UINavigationBar 在解除 UISearchController 时覆盖 UITableView【英文标题】:UINavigationBar covers UITableView when dismissing UISearchController 【发布时间】:2016-08-29 23:36:17 【问题描述】:

我有一个带有搜索按钮的 UINavigationBar。搜索按钮触发一个 UISearchController:

self.navigationItem.titleView = self.searchController.searchBar
self.searchController.searchBar.becomeFirstResponder()

当用户选择搜索结果时,会推送一个新的 ViewController。如果用户随后点击返回,则会向他们展示旧的 ViewController 以及仍处于活动状态的搜索结果。

如果他们随后点击取消关闭 UISearchController,UINavigationBar 现在会覆盖视图中的内容。我想这可能是我在 viewDidLoadfalse 中将 self.definesPresentationContext 设置为 true 时出现下一个 viewController 的原因

【问题讨论】:

【参考方案1】:

如果您认为您知道问题的原因,您是否尝试过注释掉这些行?那它还做吗?

在我看来,这更像是与 UIViewController 的 automaticallyAdjustsScrollViewInsets 属性有关。

尝试在您的 UIViewController 上将其设置为 false

编辑:

您是否尝试过更改 UIViewController 的 edgesForExtendedLayout 属性?

self.edgesForExtendedLayout = UIRectEdgeNone;

【讨论】:

注释掉 self.definesPresentationContext 只会破坏 searchController 的呈现,这意味着我无法复制它。将 automaticallyAdjustsScrollViewInsets 设置为 false 也不会改变结果 - 但我怀疑这与 UIViewController 在 searchController 处于活动状态时计算插图有关,即使 UINavigationBar 始终存在。

以上是关于UINavigationBar 在解除 UISearchController 时覆盖 UITableView的主要内容,如果未能解决你的问题,请参考以下文章

单击显示/隐藏 UIToolbar

自定义后退按钮的可访问性

UINavigationBar titleview 图像未与 UINavigationBar 对齐

UINavigationBar 隐藏在 statusBar [重复]

UINavigationBar

在 UINavigationController 子类中设置 UINavigationBar 子类