Скрыть панель поиска при нажатии кнопки отмены и изменить размер панели навигации - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть панель поиска, реализованная с использованием UISearchController внутри моей панели навигации.Существует также табличное представление, верхнее ограничение которого установлено в нижней части панели навигации.

Требуемое поведение: При нажатии кнопки отмены панель поиска скрывается, а верхнее ограничениепредставления таблицы возвращается к тому, что было до удаления панели поиска (см. снимок экрана # 1 в конце этого сообщения)

Текущее поведение: Когданажата кнопка отмены, строка поиска исчезла, но верхнее ограничение tableView не изменяется в ответе (см. снимок экрана № 3 )

Возможное решение этой проблемы - вручнуюобновлять ограничения при каждом нажатии кнопки отмены.Однако я не могу найти способ доступа к ограничениям tableView из метода UISearchBarDelegate searchBarCancelButtonClicked

Фрагмент кода:

class ViewController: UIViewController {

    let searchController = UISearchController(searchResultsController: nil)

    override func viewDidLoad() {
        super.viewDidLoad()

        searchController.searchBar.delegate = self

        /* Adding search button to the navbar */

        /* setting tableView constraints */

        /* tableView delegate/datasource methods, etc... */
    } 

    @objc func searchButtonTapped(_ sender: UIBarButtonItem) {
        setup()
        navigationItem.searchController = searchController
    }

    func setup() {
        searchController.hidesNavigationBarDuringPresentation = false
        searchController.obscuresBackgroundDuringPresentation = false
        searchController.searchBar.sizeToFit()
    }
}

extension UISearchBarDelegate {
    public func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {

        navigationItem.searchController = nil

        /* Cannot access tableview constraints from here because extension is outside of the class */
    }
}

Перед поискомкнопка нажата.

До нажатия кнопки отмены.enter image description here

После нажатия кнопки отмены.enter image description here

Ответы [ 2 ]

0 голосов
/ 13 сентября 2018

(ДА, это правильно)

func searchBarCancelButtonClicked(_ searchBar: UISearchBar){

   self.navigationItem.searchController = nil

   self.view.setNeedsLayout()

 /* Cannot access tableview constraints from here because extension is outside of the class */
}
0 голосов
/ 13 сентября 2018

Добавьте код в одну строку следующим образом:

func searchBarCancelButtonClicked(_ searchBar: UISearchBar){

   self.navigationItem.searchController = nil

   self.view.setNeedsLayout()

 /* Cannot access tableview constraints from here because extension is outside of the class */
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...