Как скрыть панель поиска на свитке?(без UITableViewController) - PullRequest
0 голосов
/ 25 июня 2019

У меня есть простой UIViewController, содержащий UITableView, и я хочу скрыть панель поиска внутри панели навигации при прокрутке UITableView.Я нашел

navigationItem.hidesSearchBarWhenScrolling = true

, но это не работает.Есть ли способ заставить его работать на UIViewController?

Ответы [ 3 ]

0 голосов
/ 25 июня 2019

Пожалуйста, попробуйте этот подход

override func viewWillAppear(_ animated: Bool) {
        if #available(iOS 11.0, *) {
              navigationItem.hidesSearchBarWhenScrolling = false
       }
}

override func viewDidAppear(_ animated: Bool) {
        if #available(iOS 11.0, *) {
              navigationItem.hidesSearchBarWhenScrolling = true
      }
}
0 голосов
/ 25 июня 2019

Простая реализация SWIFT 4

Добавить UISearchBarDelegate делегата вашему классу

Затем добавьте эту функцию в ваш класс

func showSearchBar() {
    let searchController = UISearchController(searchResultsController: nil)
    searchController.searchBar.delegate = self
    searchController.dimsBackgroundDuringPresentation = false
    searchController.hidesNavigationBarDuringPresentation = true
    navigationItem.hidesSearchBarWhenScrolling = true 
    //true for hiding, false for keep showing while scrolling
    searchController.searchBar.sizeToFit()
    searchController.searchBar.returnKeyType = UIReturnKeyType.search
    searchController.searchBar.placeholder = "Search here"
    navigationItem.searchController = searchController
}

Затемвызовите функцию в вашем viewDidLoad()

0 голосов
/ 25 июня 2019

По моим предположениям, когда вы впервые вводите UIViewController, UISearchBar по умолчанию скрыт, учитывая, что вы используете UISearchController и получаете к нему доступ с помощью значка поиска или чего-то еще.

В этом случае iOS по умолчанию не скрывает UISearchBar и (скрывает / показывает его) в зависимости от направления прокрутки в UITableView, как это решить.

Поскольку мы ничего не можем сделать, чтобы отменить это поведение, но мы можем немного улучшить ситуацию, когда пользователь отменяет записи, мы установили UISearchController в nil, чтобы удалить его из UIViewController икогда пользователь нажимает на значок поиска, мы снова присваиваем ему значение и показываем его.

Примечание. Этот ответ предполагает, что вы реализуете его таким образом, учитывая, что в вопросе не так много контекста и кода.

Давайте проникнем в код.

 func prepareSearchController() { //function to setup the SearchBar  
    // Setup the Search Controller
    searchController.searchResultsUpdater = self
    searchController.searchBar.delegate = self
    searchController.obscuresBackgroundDuringPresentation = false
    searchController.searchBar.placeholder = "Search Items"
    navigationItem.searchController = searchController
    definesPresentationContext = true
}

   @objc func openSearch() { // when user tap on the search icon 
    prepareSearchController()
    self.navigationItem.searchController?.isActive = true
}

Теперь мы соблюдаем UISearchBarDelegate для доступа к действию кнопки отмены.

 func searchBarCancelButtonClicked(_ searchBar: UISearchBar) { // this function is available only in search bar delegate  make sure to conform to it . 
    self.navigationItem.searchController = nil 
}
...