Подтвердить что ты не робот

UISearchBar в навигационной панели

Как я могу показать UISearchBar в NavigationBar?

Я не могу понять, как это сделать.

Ваша помощь очень ценится.

4b9b3361

Ответ 1

Чтобы поместить searchBar в центр навигацииBar:

self.navigationItem.titleView = self.searchBarTop;

Чтобы поместить searchBar влево/вправо sideBar:

UIBarButtonItem *searchBarItem = [[UIBarButtonItem alloc] initWithCustomView:searchBar];
self.navigationItem.rightBarButtonItem = searchBarItem;

Ответ 2

Как и в iOS 7, UISearchDisplayController поддерживает это по умолчанию. Установите UISearchDisplayController displaysSearchBarInNavigationBar = YES, чтобы получить эту работу легко.

В документации:

Начиная с iOS 7.0, вы можете использовать контроллер отображения поиска с панелью навигации (экземпляр класса UINavigationBar), настроив контроллеры отображения поиска, отображая свойстваSearchBarInNavigationBar и свойства navigationItem.

Ответ 3

Как заметил один из комментаторов, использование searchDisplayController.displaysSearchBarInNavigationBar = true завершает скрытие любых существующих элементов кнопки влево/вправо.

Я нашел два разных способа добавления searchBar в navigationBar с использованием нового свойства iOS7 на searchDisplayController.

1) Подход, основанный на Nib

Если вы используете .xib, вы можете установить атрибут Runtime User Defined Runtime для этого значения, и по какой-либо причине функция leftBarButtonItem остается в такте. Я не тестировал его с помощью rightBarButtonItem.

enter image description here

2) Код (Сроки)

Если вы хотите внедрить в код, время, похоже, имеет значение. Кажется, что сначала нужно добавить searchBar в navigationBar, а затем установить barButtonItem.

- (void)viewDidLoad
{
    ...
    self.searchDisplayController.displaysSearchBarInNavigationBar = true;
    self.navigationItem.leftBarButtonItem = [UIBarButtonItem new];
    ...
}

Ответ 4

Ознакомьтесь с образцом кода Apple UICatalog. Он показывает, как использовать новый UISearchController тремя различными способами: модально, в навигационной панели и под панелью навигации.

Ответ 5

Фрагмент кода цели C

- (void)viewDidLoad {
    UISearchController *searchController = [[UISearchController alloc] initWithSearchResultsController:nil];

    if (@available(iOS 11.0, *)) {
        self.navigationItem.searchController = searchController;
    } else {
        self.navigationItem.titleView = searchController.searchBar;
    }
}

Подробнее здесь