Панель параметров рабочей области ниже UISearchBar

У меня есть UISearchBar и UISearchDisplayController, все работает отлично, но мой селектор видимости отображается рядом с текстовым полем, а не под ним. Я знаю, что это ожидаемое действие, когда устройство находится в ландшафте, но поскольку у меня есть UISearchBar в главном представлении UISplitViewController, он выглядит следующим образом:

UISearchBar problem

Есть ли способ заставить панель видимости отображаться под текстовым полем во всех ориентациях интерфейса (я знаю, что это хорошо работает в Mail.app на iPad, поэтому возможно, но кто знает, решит ли Apple скрыть вариант для этого)

Ответы

Ответ 1

Это не является частью публичного API. Надеюсь, он будет добавлен в будущем. Это может быть выполнено с помощью Private API, просмотр дампа класса UIKit поможет вам там.

Удачи!

edit: Обратите внимание, что использование частных API может заставить вас отказаться от хранилища приложений, как это уже известно большинству людей.

Ответ 2

Я использовал UISearchDisplayDelegate, чтобы показать и скрыть панель видимости.

-(void)searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controller
{
    [controller.searchBar setShowsScopeBar:YES];
}

-(void)searchDisplayControllerWillEndSearch:(UISearchDisplayController *)controller
{
    [controller.searchBar setShowsScopeBar:NO];
}

Ответ 3

Не используйте частные API. Вместо этого следуйте рекомендациям Apple из Руководства пользователя IOS:

Когда панель поиска присутствует, рядом с ней может появиться панель видимости. панель видимости под панелью поиска, независимо от ориентации, если вы не используете в своем коде контроллер отображения поиска (для более информация о том, как это работает, см. UISearchDisplayController Class Справка). Когда вы используете контроллер отображения поиска, панель видимости отображается в строке поиска справа от поля поиска, когда устройство находится в альбомной ориентации (в портретной ориентации, ниже строки поиска).

Это работало для меня с помощью раскадровки.

Ответ 4

Почему бы просто не настроить вашу панель поиска в настройках? Вот что я использую в своем текущем проекте. Он скрывает строку поиска до тех пор, пока пользователь не прокрутится вверх, и панель области загружается под текстовым полем, когда они начнут вводить элементы. Оттуда просто отфильтруйте, как обычно:

- (void)setupSearchBar {
self.searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 44)];
self.searchBar.showsScopeBar = YES;
self.searchBar.scopeButtonTitles = [NSArray arrayWithObjects:@"Users", @"Groups", nil];
self.tableView.tableHeaderView = self.searchBar;

CGPoint offset = CGPointMake(0, self.searchBar.frame.size.height);
self.tableView.contentOffset = offset;

self.searchController = [[UISearchDisplayController alloc] initWithSearchBar:self.searchBar
                                                          contentsController:self];
self.searchController.searchResultsDataSource = self;
self.searchController.searchResultsDelegate = self;
self.searchController.delegate = self;
}

вызов [self setupSearchBar]; в viewDidLoad, который вы отправили на гонки.