Ios 展开以查看搜索结果控制器处于活动状态时,顶部留有黑色间隙

Ios 展开以查看搜索结果控制器处于活动状态时,顶部留有黑色间隙,ios,objective-c,ios8,uisearchcontroller,Ios,Objective C,Ios8,Uisearchcontroller,我有多个视图控制器,它们都使用一个类(我们称之为searchClass),我编写了一个UISearchController用于搜索外部API。用户可以点击搜索图标,搜索控制器变为活动状态:[\u searchClass.searchController setActive:YES]它使用自己的表视图控制器(不是每个视图控制器中的一个,因为它们不都是表视图控制器) 在我的例子中,我使搜索栏出现在导航栏中。搜索效果很好,用户可以选择搜索结果并点击它查看详细信息问题是当用户从详细视图返回(展开)到搜索

我有多个视图控制器,它们都使用一个类(我们称之为
searchClass
),我编写了一个
UISearchController
用于搜索外部API。用户可以点击搜索图标,搜索控制器变为活动状态:
[\u searchClass.searchController setActive:YES]它使用自己的表视图控制器(不是每个视图控制器中的一个,因为它们不都是表视图控制器)

在我的例子中,我使搜索栏出现在导航栏中。搜索效果很好,用户可以选择搜索结果并点击它查看详细信息问题是当用户从详细视图返回(展开)到搜索结果时,在表格视图上方和导航栏下方会出现一个大约44磅高的黑色间隙,然后消失

这是我的设置。在视图控制器中:

    self.definesPresentationContext = YES;
    _searchClass = [SearchClass new];
    _searchClass.navController = [self navigationController];
在搜索类中:

    _searchTableViewController = [[UIStoryboard storyboardWithName:@"MainStoryboard" bundle:[NSBundle mainBundle]] instantiateViewControllerWithIdentifier:@"searchTableViewController"];
    _searchTableViewController.tableView.delegate = self;
    _searchTableViewController.tableView.dataSource = self;
    _searchTableViewController.tableView.backgroundColor = [UIColor clearColor];
    _searchTableViewController.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
    _searchTableViewController.tableView.tableHeaderView = [[UIView alloc] initWithFrame:CGRectZero];
    _searchTableViewController.definesPresentationContext = YES;

    _searchController = [[UISearchController alloc] initWithSearchResultsController:_searchTableViewController];
    _searchController.delegate = self;
    _searchController.hidesNavigationBarDuringPresentation = NO;

    _searchController.searchBar.delegate = self;
    _searchController.searchBar.searchBarStyle = UISearchBarStyleMinimal;
    _searchController.searchBar.showsCancelButton = YES;
    _searchController.searchBar.frame = CGRectMake(self.searchController.searchBar.frame.origin.x, self.searchController.searchBar.frame.origin.y, self.searchController.searchBar.frame.size.width, 44.0);
还有用于
UISearchBar
UISearchController
的常用委托方法,以及显示搜索栏的代码,该代码使用动画替换导航栏的标题视图


在返回搜索结果后,如何消除该间隙?

我找到了解决方案,它与
UINavigationBar
有关。出于某种原因,将半透明属性设置为
NO
似乎导致了此问题

self.navigationBar.translucent = YES;
将其设置为
YES
(或省略该行,因为它是默认行)使其正常工作。因为我仍然希望导航栏是不透明的,所以我做了以下操作,使导航栏仅在过渡期间半透明,这似乎就是问题所在:

- (void) viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    self.navigationController.navigationBar.translucent = YES;
}

-(void) viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    self.navigationController.navigationBar.translucent = NO;
}
在我看来,这绝对是一个真正的iOS bug