IOS7, когда UIsearchbar добавлен в UINavigationBar, не отображая кнопку отмены
Я добавляю UISearchBar выше UINavigationBar и устанавливаю UIsearchbar showCancelButton ДА, отлично работаю в 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];
Ответы
Ответ 1
По какой-то причине iOS7 не отображает кнопку отмены при добавлении в панель навигации. Это также происходит, если вы попытаетесь установить его как titleView элемента navigationItem.
Вы можете обойти эту проблему, сначала включив 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;
Ответ 2
У меня была аналогичная проблема, на панели поиска iPhone с отменой кнопки хорошо показывают, но на iPad кнопка отмены не показывалась. Объединение UIsearchBar в UIView, например, с проблемой стиля броска @Rodskjegg. На iPad UIsearchBar устанавливают его как titleView элемента navigationItem и добавляем 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];
}
Ответ 3
С iOS 7 вы можете просто установить свойство displaysSearchBarInNavigationBar
на YES
на UISearchDisplayController
, чтобы автоматически получить UISearchbar
в NavigationBar.
Ответ 4
Да
В iOS 7 кнопка расположена на экране, но ее название может быть невидимым
Мое решение состояло в том, чтобы установить стиль поиска в "Минимальный" и выбрать цвет оттенка штриха для цвета текста "Отмена" в IB
![enter image description here]()
И результат в симуляторе:
![enter image description here]()
Ответ 5
Я столкнулся с той же проблемой, вот мое решение, надеюсь, что это поможет.
Некоторые дополнительные объяснения:
Я узнал, что отправив 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];
}
Ответ 6
У меня была та же проблема, на iPhone отмена поиска была показана хорошо, но на iPad этого не произошло.
Обходной путь обертывания UISearchBar в другом UIView не помог мне, поскольку он имел разный внешний вид и неправильную ширину при вращении.
Мое решение является простым: используйте поиск БЕЗ отмены и добавьте отмену как UIBarButtonItem.
Ответ 7
Внедрите делегат панели поиска и используйте это:
- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar
{
searchBar.showsCancelButton = YES;
}