UISearchController в панели навигации

Я пытаюсь использовать новый UISearchController в своем tableViewController.

Однако я немного смущен тем, как он может двигаться вверх в навигационном контроллере, когда я нажимаю панель поиска, как это было со старым searchDisplayController?

На данный момент он просто остается в tableHeader.

Вот мой код:

    self.teamSearchController = ({
        let controller = UISearchController(searchResultsController: nil)

        controller.searchBar.searchBarStyle = UISearchBarStyle.Minimal
        controller.dimsBackgroundDuringPresentation = false
        controller.searchBar.sizeToFit()
       controller.searchBar.showsScopeBar = true
        self.tableView.tableHeaderView = controller.searchBar

        return controller
    })()

Контроллер:

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

Когда я нажимаю на панель поиска:

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


person Peter Pik    schedule 28.04.2015    source источник
comment
удаление controller.hidesNavigationBarDuringPresentation = false также должно дать вам ожидаемое поведение   -  person Praveen Gowda I V    schedule 28.04.2015
comment
Я добавил 2 изображения, которые описывают поведение   -  person Peter Pik    schedule 28.04.2015
comment
установите для параметра hidesNavigationBarDuringPresentation вашего searchController значение true и попробуйте переключить значение definesPresentationContext вашего ViewController, чтобы увидеть результат. никогда не скрываетNavigationBarDuringPresentation в false и никогда не помещайте панель поиска в titleView элемента навигации, если вы хотите упомянутое вами поведение.   -  person Solomon    schedule 28.04.2015


Ответы (3)


Вы можете разместить UISearchBar из UISearchController на панели навигации вместо заголовка таблицы.

self.searchController.hidesNavigationBarDuringPresentation = NO;
self.searchController.searchBar.searchBarStyle = UISearchBarStyleMinimal;

// Include the search bar within the navigation bar.
self.navigationItem.titleView = self.searchController.searchBar;

self.definesPresentationContext = YES;
person Praveen Gowda I V    schedule 28.04.2015
comment
Я добавил 2 изображения, которые описывают поведение - person Peter Pik; 28.04.2015
comment
Вы пробовали решение в этом ответе? - person Praveen Gowda I V; 28.04.2015
comment
Нет, но это будет добавлено в топ с самого начала и не будет иметь такого же поведения, как в searchDisplayController. - person Peter Pik; 28.04.2015
comment
Но я думаю, это нормально, если он находится в tableHeaderVIew, но тогда он должен быть без кнопки отмены, но если я удалю это, это даст мне поведение на изображениях - person Peter Pik; 28.04.2015

Swift версия:

self.searchController.hidesNavigationBarDuringPresentation = false
self.searchController.searchBar.searchBarStyle = UISearchBarStyle.Minimal

// Include the search bar within the navigation bar.
self.navigationItem.titleView = self.searchController.searchBar
self.definesPresentationContext = true
person fatihyildizhan    schedule 04.01.2016

Это связано с панелью навигации.

func willPresentSearchController(searchController: UISearchController) {
    self.navigationController?.navigationBar.translucent = true
}

func willDismissSearchController(searchController: UISearchController) {
    self.navigationController?.navigationBar.translucent = false
}

Если вы сделаете это, вы сможете добавить его в заголовок табличного представления и получить встроенную анимацию контроллера поиска!

person kylesyoon    schedule 20.04.2016