UISearchBar 在活动时与 UITableView 内容重叠

Posted

技术标签:

【中文标题】UISearchBar 在活动时与 UITableView 内容重叠【英文标题】:UISearchBar overlaps with UITableView content when active 【发布时间】:2016-05-02 22:58:26 【问题描述】:

我有一个带有表格视图和 UISearchController 的视图控制器。运行应用程序时,我发现搜索栏在其处于活动状态时会与内容重叠。当搜索栏处于活动状态时,我需要进行什么调整以使内容不重叠?

普通视图:

搜索栏处于活动状态:

查看控制器设置:

【问题讨论】:

你做了edgesForExtendedLayout = .NoneautomaticallyAdjustsScrollViewInsets = false吗? @ozgur 不,我没有。我已经附上了设置的屏幕截图。 您的搜索栏在一张图片的导航栏下方,在另一张图片中,请说明它是如何呈现的以及它是什么的子视图 为什么不能使用自动布局? @rakeshNS 我正在使用自动布局 【参考方案1】:

问题是因为你有automaticallyAdjustsScrollViewInsets = true

请取消选中

会有所帮助:)

【讨论】:

谢谢 - 这与对布局约束的更改一起修复了它。 是否应该为表格视图关闭调整滚动视图插图? 是的,即使我正在使用自动布局,我更愿意将其关闭 谢谢 - 明天将奖励赏金。 我仍然面临同样的问题.....我的部分标题与 tableHeaderView 重叠【参考方案2】:

您可以通过这种方式使用“UISearchController”:

_searchController = [[UISearchController alloc] initWithSearchResultsController:self.resultsTableController];
self.searchController.searchResultsUpdater = self;
[self.searchController.searchBar sizeToFit];
self.tableView.tableHeaderView = self.searchController.searchBar;

// we want to be the delegate for our filtered table so didSelectRowAtIndexPath is called for both tables
self.resultsTableController.tableView.delegate = self;
self.searchController.delegate = self;
self.searchController.dimsBackgroundDuringPresentation = NO; // default is YES
self.searchController.searchBar.delegate = self; // so we can monitor text changes + others

// Search is now just presenting a view controller. As such, normal view controller
// presentation semantics apply. Namely that presentation will walk up the view controller
// hierarchy until it finds the root view controller or one that defines a presentation context.
//
self.definesPresentationContext = YES;  // know where you want UISearchController to be displayed

您可以使用此工作 Apple Reference Sample code 了解更多详细信息。

【讨论】:

你应该把'SearchBar'放在表格的标题视图中。【参考方案3】:

试着把你的 SearchBar 放在 TableView 的头部。

【讨论】:

【参考方案4】:

把这个写在你的 viewDid() 中。

来源:apple

if #available(ios 11.0, *) 
    // For iOS 11 and later, place the search bar in the navigation bar.
    navigationItem.searchController = searchController

    // Make the search bar always visible.
    navigationItem.hidesSearchBarWhenScrolling = false
 else 
    // For iOS 10 and earlier, place the search controller's search bar in the table view's header.
    tableView.tableHeaderView = searchController.searchBar

【讨论】:

【参考方案5】:

这与在 iOS 11 上滚动时取消隐藏搜索栏有关。

if #available(iOS 11.0, *) 
  navigationItem.searchController = searchController
  navigationItem.hidesSearchBarWhenScrolling = false
 else 
  // Fallback on earlier versions
  tableView?.tableHeaderView = searchController.searchBar

【讨论】:

以上是关于UISearchBar 在活动时与 UITableView 内容重叠的主要内容,如果未能解决你的问题,请参考以下文章

UISearchController 搜索栏在活动时与第一个单元格重叠

第四章:IOS Table表视图搜索功能UISearchBar

如何在保持 UISearchBar 处于活动状态的同时强制 UITableView 重新加载数据?

UISearchController 的 UISearchBar 在活动时移出屏幕

iOS有没有办法在活动时将UISearchBar保留在TableviewHeader中

当 UISearchBar 变为活动状态时,UISearchResultsTableView 不会出现