#ios #swift #uinavigationbar
Вопрос:
Я добавил навигационную панель без навигационного контроллера, поэтому навигационная панель-это всего лишь полоса. Есть ли какой-нибудь способ заставить навигационную панель закрывать всю верхнюю часть экрана телефона?
Ответ №1:
Попробуйте установить объект делегата для панели навигации. Что-то вроде;
navigationBar.delegate = self
Соответствуйте UIBarPositioningDelegate
в своем объекте делегата и прикрепите панель вверху;
ViewController: UIViewController, UIBarPositioningDelegate {
func position(for bar: UIBarPositioning) -> UIBarPosition {
return .topAttached
}
}
Ответ №2:
Без навигационного контроллера вы берете на себя ответственность за определение размеров и позиционирование панели. Пожалуйста, попробуйте добавить некоторые ограничения, прикрепляющие верхние, ведущие и конечные якоря к верхним, ведущим и конечным якорям супервизора. Затем добавьте ограничение, прикрепляющее нижнюю часть панели навигации к нижней части безопасной области с константой, скажем, 44 пункта, какой бы высоты вы ни пожелали.
Ответ №3:
Просто добавьте фиктивное представление поверх панели dummyNavBar, объявите свой вид сверху в классе объявления контроллера:
let topView = UIView()
теперь в viewDidLoad установите цвет фона верхнего вида и добавьте ограничения:
topView.backgroundColor = .white // the background must be the same of your dummyNavBar
topView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(topView)
topView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
topView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
topView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
topView.bottomAnchor.constraint(equalTo: yourDummynavBar.topAnchor).isActive = true
Ответ №4:
Если вы используете SwiftUI, вы можете добавить этот модификатор в свой вид навигации:
.edgesIgnoringSafeArea(.top)