it-swarm.com.ru

iOS7, когда UIsearchbar добавлен в UINavigationBar, не показывая кнопку отмены

Я добавляю UISearchBar выше UINavigationBar и устанавливаю UIsearchbar показывает CancelButton YES, нормально работает в iOS6, но в iOS7 не отображается кнопка отмены . Я использовал ниже фрагмент кода 

UISearchBar *searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, 600, 44)];
searchBar.showsCancelButton = YES;
searchBar.translucent = NO;
[searchBar setTintColor:[UIColor redColor]];
searchBar.backgroundColor = [UIColor yellowColor];
[self.navigationController.navigationBar   addSubview:searchBar];
22
JackYi

По какой-то причине iOS7 не показывает кнопку отмены при добавлении в панель навигации. Это также происходит, если вы попытаетесь установить его в качестве titleView элемента навигации.

Вы можете обойти эту проблему, сначала поместив UISearchBar в другой UIView. Вот как я делаю это как titleView:

UISearchBar *searchBar = [UISearchBar new];
searchBar.showsCancelButton = YES;
[searchBar sizeToFit];
UIView *barWrapper = [[UIView alloc]initWithFrame:searchBar.bounds];
[barWrapper addSubview:searchBar];
self.navigationItem.titleView = barWrapper;
44
Rodskjegg

У меня была похожая проблема, на панели поиска iPhone с кнопкой отмены показывался хорошо, но на iPad кнопка отмены не отображалась. Обтекание UIsearchBar в UIView как проблема стиля броска @Rodskjegg. На iPad UIsearchBar установите его в качестве titleView элемента навигации и добавьте UIBarButtonItem в setRighttBarButtonItem как UIBarButtonSystemItemCancel.

    [self.navigationItem setLeftBarButtonItem:Nil animated:YES];
    self.navigationItem.titleView = self.searchBar;

    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) 
    {
        UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(searchBarCancelButtonClicked:)];

        [self.navigationItem setRightBarButtonItem: cancelButton animated:YES];
    }
    else {
        [self.navigationItem setRightBarButtonItem: nil animated:YES];
    }
6
vcalfa

Начиная с iOS 7, вы можете просто установить свойство displaysSearchBarInNavigationBar в YES на UISearchDisplayController, чтобы автоматически получить UISearchbar в NavigationBar.

4
kohaxun

Да В iOS 7 кнопка расположена на экране, но ее заголовок может быть невидимым Моим решением было установить стиль поиска на «Минимальный» и выбрать оттенок полосы для цвета «Отмена» в IB.

enter image description here

И Результат в симуляторе:

enter image description here

4
David

Я столкнулся с той же проблемой, вот мое решение, надеюсь, это поможет.

Некоторое дальнейшее объяснение: Я обнаружил, что, отправляя setShowsCancelButton:animated: на панель поиска, он просто работает как волшебство. И самый чистый способ добавить searchBar на панель навигации - это self.navigationItem.titleView = self.searchBar;. Соответствующее время для вызова setShowsCancelButton:animated: в методах делегатов searchBarTextDidBeginEditing: и searchBarTextDidEndEditing:, поэтому не забудьте установить self в качестве делегата searchBar.

- (void)viewDidLoad
{
    self.navigationItem.titleView = self.searchBar;
}

- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar
{
    [searchBar setShowsCancelButton:YES animated:YES]; 
}

- (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar
{
    [searchBar setShowsCancelButton:NO animated:YES];
}
3
廖維平

У меня была такая же проблема, на iPhone отмена поиска была хорошо показана, а на iPad - нет.

Обходной путь оборачивания UISearchBar в другой UIView мне не помог, так как он имел различный внешний вид и неправильную ширину при вращении.

Мое решение простое - используйте поиск БЕЗ отмены, и добавьте отмену как UIBarButtonItem. 

1
Tal Haham

Реализуйте делегат панели поиска и используйте это:

- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar
{
    searchBar.showsCancelButton = YES;
}
0
user3607589