UISearchDisplayController表视图重叠search栏

我有一个UITableViewController子类,以iPad上的模式视图显示。 视图控制器有一个UISearchDisplayController子类,在表的标题视图中包含一个UISearchBar

子类UISearchDisplayController被称为NoAnimationSearchDisplayController ,我已经覆盖了- (void)setActive:(BOOL)visible animated:(BOOL)animated方法,以防止search栏在设置为活动状态时导航到导航栏中。 方法重写如下…

 - (void)setActive:(BOOL)visible animated:(BOOL)animated { if (self.active == visible) { return; } [self.searchContentsController.navigationController setNavigationBarHidden:YES animated:NO]; [super setActive:visible animated:animated]; [self.searchContentsController.navigationController setNavigationBarHidden:NO animated:NO]; if (visible) { [self.searchBar becomeFirstResponder]; } else { [self.searchBar resignFirstResponder]; } } 

我遇到的问题是,当我search,结果显示在我的search显示控制器的表视图,一切都看起来很好,直到我试图向下滚动列表,在这一点上单元格内的内容出现在search栏,如下面的屏幕所示:

在这里输入图像说明

search栏被设置为UISearchBarStyleMinimal并且透明度被启用。 任何人都可以让我知道如何停止这个内容重叠的search栏? 理想情况下,内容会在search栏下消失,就好像它是视图的结尾一样。

答案是在相应的委托方法中手动更改由UIsearchDisplayController提供的表视图的框架…

 - (void)searchDisplayController:(UISearchDisplayController *)controller willShowSearchResultsTableView:(UITableView *)tableView { /** * Remove content inset automatically set by UISearchDisplayController as we are forcing the * search bar to stay in the header view of the table, and not go into the navigation bar. */ [tableView setContentInset:UIEdgeInsetsMake(0.0f, 0.0f, 0.0f, 0.0f)]; /** * Recalculate the bounds of our table view to account for the additional 44 pixels taken up by * the search bar, but store this in an iVar to make sure we only adjust the frame once. If we * don't store it in an iVar it adjusts the frame for every search. */ if (CGRectIsEmpty(_searchTableViewRect)) { CGRect tableViewFrame = tableView.frame; tableViewFrame.origin.y = tableViewFrame.origin.y + 44; tableViewFrame.size.height = tableViewFrame.size.height - 44; _searchTableViewRect = tableViewFrame; } [tableView setFrame:_searchTableViewRect]; } 

确保search栏不是半透明的(在storyboard / xib上)或代码。 然后将背景变成白色或任何你想要的颜色。