Навигационная панель не полностью покрывает верхнюю часть экрана телефона

#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)