搜索结果与UISearchController的搜索栏不对齐

时间:2016-10-26 12:30:08

标签: ios uitableview uisearchcontroller

我正在尝试从UISearchDisplayController升级到UISearchController,但是遇到了很多奇怪的问题。目前的问题是搜索结果与搜索栏不对齐。在纵向模式下,搜索栏与第一个搜索结果之间存在小差距:

enter image description here

(我已将结果tableview黄色的背景着色,以显示其扩展)

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

enter image description here

绰绰有力,如果我在结果视图仍然可见的情况下旋转视图,它就会完美呈现。

我的设置是一种非常标准的方法,导航栏中有搜索栏,搜索结果位于单独的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的contentInset不正确,所以我在viewWillLayoutSubviews打印了那些,这证实了这种怀疑。

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

注意:我已尝试将edgesForExtendedLayoutautomaticallyAdjustsScrollViewInsetsextendedLayoutIncludesOpaqueBars的任意组合用于结果表格视图。

修改 我现在已经为Apple记录了一个错误:https://openradar.appspot.com/radar?id=6138130516148224

1 个答案:

答案 0 :(得分:0)

我现在找到了解决办法,似乎适用于所有情况。如果有人能够在原始代码中发现我做错了,我仍然会感激。

对于解决方法,在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);
    }
}