Ios 搜索结果未与UISearchController的搜索栏对齐

Ios 搜索结果未与UISearchController的搜索栏对齐,ios,uitableview,uisearchcontroller,Ios,Uitableview,Uisearchcontroller,我正试图从UISearchDisplayController升级到UISearchController,但它有很多奇怪的问题。当前的问题是搜索结果与搜索栏不对齐。在纵向模式下,搜索栏和第一个搜索结果之间有一个小间隙: (我已将结果表视图的背景涂成黄色,以显示其扩展) 对于横向模式,情况正好相反:搜索栏与结果顶部重叠: 很奇怪,如果我在结果视图仍然可见的情况下旋转视图,结果会非常完美 我的设置是一种非常标准的方法,搜索栏位于导航栏中,搜索结果位于单独的UITableViewController

我正试图从
UISearchDisplayController
升级到
UISearchController
,但它有很多奇怪的问题。当前的问题是搜索结果与搜索栏不对齐。在纵向模式下,搜索栏和第一个搜索结果之间有一个小间隙:

(我已将结果表视图的背景涂成黄色,以显示其扩展)

对于横向模式,情况正好相反:搜索栏与结果顶部重叠:

很奇怪,如果我在结果视图仍然可见的情况下旋转视图,结果会非常完美

我的设置是一种非常标准的方法,搜索栏位于导航栏中,搜索结果位于单独的
UITableViewController
中。 原始视图控制器中的代码:

- (void) viewDidLoad
{
    [super viewDidLoad];

    SearchResults *searchResults = [[SearchResults alloc] init];
    searchController = [[UISearchController alloc] initWithSearchResultsController:searchResults];
    searchController.searchResultsUpdater = searchResults;

    self.navigationItem.titleView = searchController.searchBar;

    searchController.hidesNavigationBarDuringPresentation = NO;
    searchController.dimsBackgroundDuringPresentation = YES;
    self.definesPresentationContext = YES;
}
SearchResults
是一个标准的
UITableViewController
子类,没有特殊的格式

我怀疑这是由于tableview的内容插入不正确,所以我在
视图willlayoutsubviews
中打印了这些内容,这证实了我的怀疑

如何解决
UISearchController
中这个明显的错误

注意:我已经尝试对结果表视图使用
edgesForExtendedLayout
automaticallyAdjustsScrollViewInsets
ExtendedLayoutinClude不透明条的任意组合

编辑:
我现在已经在Apple上记录了一个bug:

我找到了一个在所有情况下都能正常工作的解决方案。如果有人能在原始代码中发现我做错了什么,我还是会很感激的

对于解决方法,请在SearchResults类中添加以下内容:

- (void) viewWillLayoutSubviews
{
    // Workaround for bug in UISearchController:
    CGFloat topInset = self.topLayoutGuide.length + (_searchController ? _searchController.searchBar.frame.size.height : 44);
    UIEdgeInsets insets = self.tableView.contentInset;
    if (topInset != insets.top) {
        // set the correct insets
        insets.top = topInset;
        self.tableView.contentInset = insets;
        // scroll to the top
        self.tableView.contentOffset = CGPointMake(0, -topInset);
    }
}

我现在已经找到了一种在所有情况下都有效的方法。如果有人能在原始代码中发现我做错了什么,我还是会很感激的

对于解决方法,请在SearchResults类中添加以下内容:

- (void) viewWillLayoutSubviews
{
    // Workaround for bug in UISearchController:
    CGFloat topInset = self.topLayoutGuide.length + (_searchController ? _searchController.searchBar.frame.size.height : 44);
    UIEdgeInsets insets = self.tableView.contentInset;
    if (topInset != insets.top) {
        // set the correct insets
        insets.top = topInset;
        self.tableView.contentInset = insets;
        // scroll to the top
        self.tableView.contentOffset = CGPointMake(0, -topInset);
    }
}