Как сделать так, чтобы навигационная панель соответствовала безопасной зоне? - PullRequest
0 голосов
/ 09 октября 2018

Я перешел с экрана без панели навигации на экран с панелью навигации.При переходе к экрану панели навигации панель не включена ни в какие ограничения безопасной области и перекрывается строкой состояния на iPhone X. Я искала решение, но у меня ничего не получалось.Как настроить навигационную панель в соответствии с руководством по безопасной области на iPhone X, чтобы она не перекрывалась?Кроме того, его высота кажется слишком короткой, но я думаю, что это будет решено с помощью ограничений.

Заранее спасибо!

AppDelegate:

var window: UIWindow?
var navigationController: UINavigationController?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.
    window = UIWindow(frame: UIScreen.main.bounds)

    if let window = window{
        let mainVC = ViewController()
        navigationController = UINavigationController(rootViewController: mainVC)
        window.rootViewController = navigationController
        window.makeKeyAndVisible()
    }
    return true
}

Это методЯ использую, чтобы перейти от ViewController к AboutViewController:

    @objc private func infoButtonTap(){
    let aboutVC = AboutViewController()
    self.navigationController?.pushViewController(aboutVC, animated: true)
}

РЕДАКТИРОВАТЬ: Вот как это выглядит: https://imgur.com/syuQaUn

AboutVC:

эта строка находится в viewDidLoad:

        navigationController?.isNavigationBarHidden = false

, чтобы сделать панель навигации видимой.

Ответы [ 4 ]

0 голосов
/ 15 октября 2018

Я не уверен, в чем проблема.Ваш скриншот относится к ландшафтному режиму.Это поведение предназначено начиная с iOS8 для ландшафта.Поскольку вы включили панель навигации через соответствующий UINavigationController и нажали следующий ViewController, вы можете идти как есть.

UINavigationBar равен 44ps, но StatusBarFrames отличаются - вы можете работать с UIApplication.shared.statusBarFrame.height, чтобы получить фактическую высоту строки состоянияи добавьте его к вашему количеству навигационной панели.

Кстати: если вы хотите соблюдать sareAreaLayouts для iPhone X, Xs и Xr, есть подходящий NSLayout-Y/X-AxisAnchor для удовлетворения ваших потребностей.

0 голосов
/ 12 октября 2018

Все в вашем образце выглядит правильно.Я предполагаю, что есть какие-то манипуляции с кадрами, происходящими либо в ViewController, либо в AboutViewController.Посмотрите, когда window.rootViewController меняет его frame или bounds для отладки происходящего.

0 голосов
/ 12 октября 2018

Если вы действительно хотите, чтобы ваш навигационный контроллер находился в безопасной зоне.Это одно решение для вас.

  1. Создан UIController в качестве самого базового контроллера всего.Давайте назовем это SuperParentController.

  2. Убедитесь, что SuperParentController также является родительским элементом вашего контроллера навигации.

  3. Затем вы можете управлятьконтент и макет для вашего SuperParentController, чтобы убедиться, что навигационный контроллер расположен так, как вы хотели.

Мы используем эту стратегию, чтобы показать универсальный баннер для нашего приложения, который может быть представлен в любое время.,

0 голосов
/ 09 октября 2018

Встраивайте контроллер представления в контроллер навигации, а не добавляйте панель навигации вручную.Выберите контроллер представления в раскадровке и следуйте инструкциям на прилагаемом скриншоте.

Редактор -> Встроить -> Контроллер навигации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...