Как добавить и удалить searchBar из navigationItem - PullRequest
0 голосов
/ 03 ноября 2018

У меня проблемы с добавлением и удалением панели поиска UISearchControllers в панель UINavigationBar.

Вот что я делаю:

Добавить панель поиска в представление

searchController = [[UISearchController alloc]initWithSearchResultsController:nil];

searchController.searchResultsUpdater = self;
searchController.searchBar.delegate = self;

searchController.dimsBackgroundDuringPresentation = NO;
searchController.hidesNavigationBarDuringPresentation = NO;
searchController.searchBar.searchBarStyle = UISearchBarStyleProminent;
searchController.searchBar.barTintColor = [UIColor blackColor];
searchController.searchBar.tintColor = [UIColor darkGrayColor];

[searchController.searchBar setFrame:CGRectMake(0, 200, 320, searchController.searchBar.frame.size.height)];
[self.view addSubview:searchController.searchBar];

При нажатии кнопки добавить панель поиска к элементу навигации Это работает как ожидалось

[self.navigationController setNavigationBarHidden:false];
self.navigationItem.titleView = searchController.searchBar;
self.navigationItem.hidesBackButton = true;

И вот где я получаю странное поведение:

Нажав еще одну кнопку, удалите панель поиска из панели навигации и добавьте ее обратно в представление

[searchController.searchBar removeFromSuperview];
[self.navigationController setNavigationBarHidden:YES animated:true];
[self.view addSubview:searchController.searchBar];

[searchController.searchBar setFrame:CGRectMake(0, 200, 320, searchController.searchBar.frame.size.height)];

Панель поиска удаляется из панели навигации, как и ожидалось, но не возвращается к основному виду. (ну я нигде не вижу)

Я записываю значение строки поиска и вижу, что у нее есть кадр, который я ей дал.

Любая помощь здесь будет принята с благодарностью,

Спасибо

1 Ответ

0 голосов
/ 05 ноября 2018

Вы должны установить navigationItem .titleView на nil сначала и setFrame: в основном потоке.

- (IBAction)addBar:(id)sender {
    self.navigationItem.titleView = nil;
    [searchController.searchBar removeFromSuperview];
    [self.navigationController setNavigationBarHidden:NO animated:YES];
    self.navigationItem.titleView = searchController.searchBar;
    self.navigationItem.hidesBackButton = YES;
}

- (IBAction)removeBar:(id)sender {
    self.navigationItem.titleView = nil;
    [searchController.searchBar removeFromSuperview];
    [self.view addSubview:searchController.searchBar];
    [self.navigationController setNavigationBarHidden:YES animated:YES];
    dispatch_async(dispatch_get_main_queue(), ^{
        [self->searchController.searchBar setFrame:CGRectMake(0, 200, 320, self->searchController.searchBar.frame.size.height)];
    });
}

Кстати, я думаю, что лучше добавлять строку поиска в оболочку UIView при добавлении в navigationItem.titleView.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...