NavigationItem не возвращается к своему первоначальному размеру после удаления UISearchController - PullRequest
0 голосов
/ 02 марта 2020

Клон Candy Search от людей Wenderlich. Я добавил значок, чтобы показать / скрыть панель поиска.

Однако после удаления контроллера поиска из элемента навигации навигационная панель не возвращается к своему первоначальному размеру.

Кто-нибудь знает, как чтобы сделать это 1029 *? Я пробовал несколько вещей, но ни одна из них не сработала.

self.searchController.isActive = false не имеет никакого значения.

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

Спасибо!

Смотрите скриншот:

screenshot of showing/hiding the UISearchbar

Полный проект здесь: https://github.com/HerrDoktorBD/CVSearch

Соответствующий код:

lazy var searchController: UISearchController = {

    let searchController = UISearchController(searchResultsController: nil)

    searchController.searchBar.delegate = self
    searchController.searchResultsUpdater = self
    searchController.obscuresBackgroundDuringPresentation = false
    searchController.searchBar.placeholder = "Search Candy"

    // scope bar
    searchController.searchBar.scopeButtonTitles = [
        "All",
        "Chocolate",
        "Hard",
        "Other"
    ]

    return searchController
}()
func showSearchBar(show: Bool) {

    let sb: UISearchBar = searchController.searchBar

    if show {
        //print("show searchbar")

        UIView.animate(withDuration: 0.3,
                       delay: 0.0,
                       options: .curveEaseOut,
                       animations: {

            if #available(iOS 13, *) {
                self.navigationItem.searchController = self.searchController
            }

        }, completion: { (status) in

            sb.becomeFirstResponder()
        })
    }
    else {
        //print("hide searchbar")

        UIView.animate(withDuration: 0.3,
                       delay: 0.0,
                       options: .curveEaseOut,
                       animations: {

            sb.resignFirstResponder()

        }, completion: { (status) in

            if #available(iOS 13, *) {
                self.navigationItem.searchController = nil
            }
        })
    }
}

1 Ответ

0 голосов
/ 03 марта 2020

вместо этого обновите высоту вида навигации

navigationController?.view.setNeedsLayout() 
navigationController?.view.layoutIfNeeded() 

happy codding!

...