Получите высоту по умолчанию (или maxY) панели навигации на iOS - PullRequest
0 голосов
/ 15 мая 2018

Хотелось бы узнать, можем ли мы получить панель навигации по умолчанию height (предпочтительно maxY) из NavigationController.

Зная, что iOS 11 представила большие заголовки, есть ли у нас какой-то способ получить по умолчанию height (или maxY) панели навигации с «маленьким заголовком» и панели навигации с «большим» название "

Причина, по которой я спрашиваю об этом, заключается в том, что я делаю фон панели навигации прозрачным и добавляю свой собственный фон (который является представлением эффектов). Но проблема у меня заключается в том, что каждый раз, когда я запускаю следующий код

self.navigationController?.navigationBar.frame.maxY

возвращает число, превышающее ожидаемое: /

Я пытался запустить этот кусок кода на многих обратных вызовах -> onViewWillAppear, onViewDidAppear, onViewDidLoad

Ответы [ 4 ]

0 голосов
/ 26 мая 2019

Лучший подход, который я нашел до сих пор, без необходимости создания экземпляра контроллера навигации:

[self.navigationBar sizeThatFits:CGSizeZero].height;

И, к слову, он также поддерживает изменение ориентации экрана.

0 голосов
/ 15 мая 2018

Вы можете получить высоту панели навигации и строки состояния, используя это

  override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        let topSpace:CGFloat?
        if #available(iOS 11.0, *) {
            topSpace = self.view.safeAreaInsets.top
        } else {
            topSpace = self.topLayoutGuide.length
        }
        print(topSpace)
  }
0 голосов
/ 15 мая 2018

Я использовал собственный метод, чтобы получить высоту панели навигации, включая строку состояния.Используйте эту строку кода, чтобы получить высоту панели навигации и использовать в соответствии с вашими требованиями.У меня это отлично работало на всех устройствах и разных версиях iOS.

let navigationBarHeight = UIApplication.shared.statusBarFrame.size.height +
            (self.navigationController?.navigationBar.frame.height ?? 0.0)
0 голосов
/ 15 мая 2018

Это работает для меня

let navigationBarHeight = UIApplication.shared.statusBarFrame.size.height +
    (self.navigationController?.navigationBar.frame.height ?? 0.0)

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

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