Кнопка отмены не отображается в UISearchBar

У меня UICollectionView. При нажатии кнопки поиска в UINavigationBar я добавляю searchbar UISearchController в качестве заголовка для UINavigationItem. Для айфона работает нормально. Для iPad кнопка cancel не отображается. Только панель поиска занимает всю ширину.

введите здесь описание изображения

Может ли кто-нибудь помочь мне в этом? Заранее спасибо.


person Sheik_101    schedule 27.05.2015    source источник
comment
Используете ли вы разные раскадровки или xib для iPhone и iPad?   -  person Nirav Gadhiya    schedule 27.05.2015
comment
Нет. Я не использую раскадровки или xib.   -  person Sheik_101    schedule 27.05.2015
comment
Попробуйте установить searchBar.showsCancelButton = YES;   -  person Nirav Gadhiya    schedule 27.05.2015
comment
возможный дубликат iOS7, когда UIsearchbar добавлен в UINavigationBar, не отображающий отмену кнопка   -  person Nirav Gadhiya    schedule 27.05.2015
comment
В документации четко указано: значение этого свойства игнорируется, и кнопка отмены не отображается для приложений, работающих на iPad. Я не думаю, что это уместно, особенно для сценариев скольжения/разделения просмотра. Поэтому я подал радар: openradar.appspot.com/37498710   -  person Ortwin Gentz    schedule 13.02.2018


Ответы (6)


iOS7 не отображает кнопку отмены при добавлении на панель навигации. Вы можете поместить панель поиска в другое представление, подобное этому.

UISearchBar *searchBar = [UISearchBar new];
searchBar.showsCancelButton = YES;
[searchBar sizeToFit];
UIView *viewForSearchBar = [[UIView alloc]initWithFrame:searchBar.bounds];
[viewForSearchBar addSubview:searchBar];
self.navigationItem.titleView = viewForSearchBar;
person Nikita Khandelwal    schedule 27.05.2015
comment
Хороший выбор из: stackoverflow.com/questions/18986407/ - person Nirav Gadhiya; 27.05.2015

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

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

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

person Tal Haham    schedule 08.11.2015
comment
Это кажется мне правильным ответом. Кнопка отмены не поддерживается на iPad, поэтому просто добавьте ее вручную как UIBarButtonItem. - person William Denniss; 03.05.2016

Попробуй это. Добавьте галочку для показа кнопки отмены.

введите здесь описание изображения

person Kaey    schedule 27.05.2015
comment
ОП упомянул, что он работает на iPhone, но не на iPad. - person Gerald; 24.09.2016

Согласно документации Apple setShowsCancelButton

Кнопки отмены не отображаются для приложений, работающих на iPad, даже если вы укажете YES для параметра showCancelButton.

Я не уверен насчет альтернативы, но это то, что предлагает нам Apple.

введите здесь описание изображения

person Muhammad Usman Aleem    schedule 01.01.2019

Быстрая версия: -

Я попробовал метод @Nikita Khandelwal, но он все равно не подходит для просмотра на iPad. Вот быстрый код, который был дан как исправленный ответ: -

let searchBar: UISearchBar = UISearchBar()
searchBar.showCancelButton = true
searchBar.placeholder = "Search Your Job Title"
searchBar.fitToSize()
searchBar.delegate = self //do not need if you delegate searchBar
let viewForSearchBar: UIView = UIView(frame: searchBar.bounds)
viewForSearchBar.addSubview(searchBar)
self.navigationItem.titleView = viewForSearchBar

********* Но есть еще один способ правильно установить кнопку отмены и соответствовать виду: -

  1. Установите панель поиска в качестве заголовка панели навигации: -

    let searchBar: UISearchBar = UISearchBar()
    searchBar.showCancelButton = true
    searchBar.placeholder = "Search Your Job Title"
    searchBar.delegate = self //do not need if you delegate searchBar
    self.navigationItem.titleView = searchBar
    
  2. Перетащите кнопку «Панель» в правую часть контроллера представления и назовите ее «Отмена».

  3. Затем подключите эту кнопку к этой функции: -

    @IBAction func iPadCancelButton(sender: AnyObject) {
           UIApplication.sharedApplication().sendAction("resignFirstResponder", to:nil, from:nil, forEvent:nil)
          self.dismissViewControllerAnimated(true, completion: nil)
    }
    
person Chathuranga Silva    schedule 01.12.2015

Для iOS 13, созданной с помощью Xcode 11, мне нужно вручную установить отображаемое значение на кнопке отмены, в зависимости от того, виден ли контроллер поиска

person Nostradamus    schedule 16.09.2019