UISearchBar не подходит для UINavigationBar на iPad — iOS 8

Я пытаюсь разместить UISearchBar в titleView UINavigationBar.

У меня есть два решения, оба неудобны.

Во-первых, это:

[self setSearchController:[[UISearchController alloc] initWithSearchResultsController:searchResultsController]];
[self.searchController setSearchResultsUpdater:searchResultsController];
[self.searchController setHidesNavigationBarDuringPresentation:NO];
[self.searchController.searchBar setSearchBarStyle:UISearchBarStyleMinimal];
[self.searchController setDelegate:self];
[self.searchController setDimsBackgroundDuringPresentation:NO];
[self.searchController.searchBar setDelegate:self];
[self.navigationItem setTitleView:self.searchController.searchBar];
[self setDefinesPresentationContext:YES];
[self.searchController.searchBar setShowsCancelButton:YES];

Когда поиск не выполняется, результат выглядит нормально.

Не режим поиска

Но когда начинается поиск, titleView слишком сильно расширяется вправо. Действительно, кнопка отмены видна, но только не на экране...

введите здесь описание изображения

Как и в этом ответе, я попытался обернуть UISearchBar в другой UIView, прежде чем добавлять его в navigationItem.

[self setSearchController:[[UISearchController alloc] initWithSearchResultsController:searchResultsController]];
[self.searchController setSearchResultsUpdater:searchResultsController];
[self.searchController setHidesNavigationBarDuringPresentation:NO];
[self.searchController.searchBar setSearchBarStyle:UISearchBarStyleMinimal];
[self.searchController setDelegate:self];
[self.searchController setDimsBackgroundDuringPresentation:NO];
[self.searchController.searchBar setDelegate:self];

[self.searchController.searchBar setShowsCancelButton:NO];
[self.searchController.searchBar sizeToFit];
UIView *titleViewWrapper = [[UIView alloc] initWithFrame:self.searchController.searchBar.frame];
[titleViewWrapper addSubview:self.searchController.searchBar];
[self.navigationItem setTitleView:titleViewWrapper];

[self setDefinesPresentationContext:YES];
[self.searchController.searchBar setShowsCancelButton:YES];

И результат у него следующий:

Не ищет:

введите здесь описание изображения

Поиск:

введите здесь описание изображения

Я управляю элементом левой/правой кнопки панели, показывающим/скрывающим себя в методах делегата UISearchController.

Это происходит в Симуляторе, только на iPad.

Есть идеи?


person adauguet    schedule 10.11.2014    source источник