Objective-C - 滚动时 UISearchController 结果在 UISearchBar 上重叠

Objective-C - UISearchController results overlap on UISearchBar when scrolling

我的目标如下:拥有一个始终可见的 UISearchBar。当它不活动时,控制器底部有一些内容。当它变为活动状态时,我想在与 UIController 重叠的 UITableView 中显示搜索结果。

我的搜索设置方式如下: 我的 ViewController 顶部有一个固定的 UIView,它是通过 Storyboard 创建的。 在我的 viewDidLoad 方法中,我将 searchController.searchBar 添加到该 UIView,以便 UISearchBar 永久激活。 我将非常有用的以下行用于 hide/display searchResultsController: searchController.searchResultsController.view.hidden = FALSE;

除了当我显示结果时,如果我向下滚动,结果显示在 UISearchBar 的顶部,所有这一切都完美无缺。

有什么方法可以避免这种情况?我相信这是因为我使用了以下行:

[searchBarView addSubview:self.searchController.searchBar];

其中 searchBarView 是一个空的占位符视图,我在 Storyboard 上创建它并固定在顶部。这是我发现永久显示 searchBar 的唯一方法。请务必注意,我不使用导航控制器,这就是为什么我不将 searchController 添加为导航项的原因。

非常感谢您的帮助!

不要使用半透明导航栏

self.navigationController.navigationBar.translucent = NO;

您使用 UISearchController 的方式完全错误。如果是 searchcontroller,您必须提供 searchcontroller 作为结果 tableview 的 tableHeaderView。在这里,您在其他地方将 searchcontroller 添加到 UIView 和 tableview 中。这显然不行。

你还是可以试试这个方法---

  1. 使 topView 不透明。(不为该 containerview 提供透明度)
  2. 使用 UISearchbar 而不是 UISearchcontroller

这样,我想你的问题就解决了。

我已经搜索了好几个小时,最终结果是将这一行放在 viewDidLoad 中:

self.extendedLayoutIncludesOpaqueBars = YES;

问题已解决:)

希望对您有用。谢谢