Ответ 1
Вы сталкиваетесь с проблемой "дизайна", где ожидается, что scopeBar
будет скрыт, если searchController
не активен.
Кнопки панели области отображаются за (под) панель поиска, поскольку это их местоположение, когда панель поиска становится активной и анимируется в панели навигации.
Когда поиск неактивен, видимая панель видимости занимает место на экране, отвлекает от содержимого и путает пользователя (поскольку кнопки области не имеют результатов для фильтрации).
Поскольку ваш searchBar
уже находится в titleView, анимация бара (навигационная и поисковая), которая показывает панель видимости, не возникает.
- Самый простой вариант - найти строку поиска ниже
навигационной панели, и пусть
searchBar
оживится в заголовке при активации. Навигационная панель будет анимировать ее высоту, чтобы включить панель видимости, которая была скрыта. Это все обрабатывается контроллером поиска. -
Второй вариант, почти такой же простой, - использовать кнопку Поиск значок, который будет анимировать
searchBar
иscopeBar
вниз просмотрите панель навигации.- (IBAction)searchButtonClicked:(UIBarButtonItem *)__unused sender { self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil]; self.searchController.searchResultsUpdater = self; self.searchController.hidesNavigationBarDuringPresentation = NO; self.searchController.dimsBackgroundDuringPresentation = NO; self.definesPresentationContext = YES; self.searchController.searchBar.scopeButtonTitles = @[@"Posts", @"Users", @"Subreddits"]; [self presentViewController:self.searchController animated:YES completion:nil]; }
-
Если вы хотите, чтобы
searchBar
оставался в titleView, анимация делать то, что вы хотите, не встроено. Вам придется сворачивать код для обработки изменения высоты навигационной панели и отображения собственных (или зацепить внутреннюю часть и анимировать встроенныйscopeBar
вниз и в представлении).Если вам повезло, кто-то написал код
willPresentSearchController:
для обработки желаемого перехода. -
Если вы хотите всегда видеть
searchBar
иscopeBar
, вам, вероятно, придется портить встроенныйscopeBar
и заменить его наUISegmentedControl
, который всегда будет см., даже если контроллер поиска не активен.
Update:
Этот ответ предложил подклассифицировать UISearchController
, чтобы изменить его высоту searchBar.