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 向上/向下滚动

以编程方式控制滚动视图——Objective-c

在 UICollectionView 滚动了一定距离后调用函数 Objective-C

Objective-C UIScrollView 不滚动

搜索栏返回按钮

如何在ios objective-c 应用程序中使屏幕的全部内容滚动