Этот вопрос на самом деле содержит две разные проблемы:
1- В случае внезапного свертывания «Большой панели навигации» при переходе на другой контроллер представления:
Основная причина заключается в прокрутке TableView, Попробуйте следующее:
self.tableView.contentInsetAdjustmentBehavior = .never
Вы также можете установить его из «Инспектора размеров» в раскадровке.
Он регулирует положение прокрутки, соответствующее SafeArea.
2- Случай "Панели навигации по умолчанию", который содержит панель поиска в представлении заголовка элемента навигации:
Основная причина в том, что панель поиска по умолчанию добавляется с высотой "56"
Относительно черной линии, которая появляется под навигационной панелью контроллера выдвинутого вида, поэтому вы можете исправить это следующим образом:
// Inside ViewDidLoad of the Pushed View Controller
self.extendedLayoutIncludesOpaqueBars = true
ИЛИ
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
navigationController?.view.setNeedsLayout()
navigationController?.view.layoutIfNeeded()
}
- Чтобы вообще запретить расширение панели навигации при установке панели поиска следующим образом:
Вам необходимо создать настраиваемое представление с фиксированным высота добавьте эту строку поиска внутрь нее и проверьте следующее:
class SearchBarViewHolder: UIView {
let searchBar: UISearchBar
init(customSearchBar: UISearchBar) {
searchBar = customSearchBar
super.init(frame: CGRect.zero)
addSubview(searchBar)
}
override convenience init(frame: CGRect) {
self.init(customSearchBar: UISearchBar())
self.frame = frame
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func layoutSubviews() {
super.layoutSubviews()
searchBar.frame = bounds
}
}
// Добавление панели поиска
let searchBarViewHolder = SearchBarViewHolder(customSearchBar: searchBar)
searchBarViewHolder.frame = CGRect(x: 0, y: 0, width: view.frame.width, height: 44)
navigationItem.titleView = searchBarViewHolder