Objective-C - 滚动时 UISearchController 结果在 UISearchBar 上重叠
Posted
技术标签:
【中文标题】Objective-C - 滚动时 UISearchController 结果在 UISearchBar 上重叠【英文标题】:Objective-C - UISearchController results overlap on UISearchBar when scrolling 【发布时间】:2018-12-02 00:43:14 【问题描述】:我的目标如下:拥有一个始终可见的 UISearchBar。当它不活动时,控制器底部有一些内容。当它变为活动状态时,我想在与 UIController 重叠的 UITableView 中显示搜索结果。
我的搜索设置方式如下:
我的 ViewController 顶部有一个固定的 UIView,它是通过 Storyboard 创建的。
在我的 viewDidLoad 方法中,我将 searchController.searchBar 添加到该 UIView,以便 UISearchBar 永久处于活动状态。
我使用非常有用的以下行来隐藏/显示 searchResultsController:
searchController.searchResultsController.view.hidden = FALSE;
所有这一切都完美无缺,除了当我显示结果时,如果我向下滚动,结果会显示在 UISearchBar 的顶部。
有什么方法可以避免这种情况?我相信这是因为我使用了以下行:
[searchBarView addSubview:self.searchController.searchBar];
其中 searchBarView 是一个空的占位符视图,我在 Storyboard 上创建并粘贴在顶部。这是我发现永久显示搜索栏的唯一方法。请务必注意,我不使用导航控制器,这就是我不将 searchController 添加为导航项的原因。
非常感谢您的帮助!
【问题讨论】:
【参考方案1】:您使用UISearchController
的方式完全错误。在searchcontroller 的情况下,您必须提供searchcontroller 作为结果tableview 的tableHeaderView。在这里,您将在其他地方将 searchcontroller 添加到 UIView 和 tableview 中。这显然行不通。
您仍然可以尝试这种可能的方法---
-
使 topView 不透明。(不要为该容器视图提供透明度)
使用
UISearchbar
而不是UISearchcontroller
。
通过这种方式,我认为你的问题会得到解决。
【讨论】:
【参考方案2】:不要使用半透明的导航栏
self.navigationController.navigationBar.translucent = NO;
【讨论】:
【参考方案3】:我已经搜索了好几个小时,最终结果是将此行放入 viewDidLoad:
self.extendedLayoutIncludesOpaqueBars = YES;
问题解决了:)
我希望它对你有用。谢谢。
【讨论】:
以上是关于Objective-C - 滚动时 UISearchController 结果在 UISearchBar 上重叠的主要内容,如果未能解决你的问题,请参考以下文章
Objective-C UICollectionView 向上/向下滚动