Я пытаюсь разместить 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.
Есть идеи?