2016-10-26 4 views
1

Я пытаюсь обновить с UISearchDisplayController до UISearchController, но у вас много странных проблем с ним. Текущая проблема заключается в том, что результаты поиска не совпадают с поисковой панелью. В портретном режиме, есть небольшой зазор между SearchBar и первый результат поиска:Результаты поиска не согласованы с поисковой системой для UISearchController

enter image description here

(я цветной фон из Tableview результатов желтый, чтобы показать его продлить)

Для ландшафта режим, обратное верно: Searchbar перекрывает верхнюю часть результатов:

enter image description here

достаточно Strangly, если я затем повернуть изображение с учетом результатов все еще видимый, он получается отлично.

Моя настройка довольно стандартная, с панелью поиска на панели навигации, а результаты поиска - в отдельном 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 подкласс, без специального форматирования.

Мои подозрения были в том, что это было из-за неправильного содержимого. В результате, из-за табличного обзора я напечатал их в viewWillLayoutSubviews, что подтвердило это подозрение.

Как я могу обойти эту очевидную ошибку в UISearchController?

Примечание: Я попытался использовать любую комбинацию из edgesForExtendedLayout, automaticallyAdjustsScrollViewInsets и extendedLayoutIncludesOpaqueBars для просмотра результатов.

EDIT: Я теперь вошел ошибка с Apple, для этого: https://openradar.appspot.com/radar?id=6138130516148224

ответ

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); 
    } 
}