获取 iOS 上导航栏的默认高度(或最大值)

Get the default height (or maxY) of a NavigationBar on iOS

我想知道有没有办法让我们获得NavigationController.

的默认导航栏height(最好是maxY

知道 iOS 11 引入了大标题,那么我们有什么办法可以让导航栏的默认 height(或 maxY)具有 "small title" 和带有 "large title"?

的导航栏

我问这个的原因是因为我正在使导航栏的背景透明并向其引入我自己的背景(这是一个效果视图)。但我遇到的问题是每次我 运行 以下代码

self.navigationController?.navigationBar.frame.maxY

它 returns 比预期的高很多:/

我尝试 运行 这段代码的许多回调 -> onViewWillAppear, onViewDidAppear, onViewDidLoad

这对我有用

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

即使你的方法很艰难,也可能是最适合你的解决方案,我主要尝试不使用本机导航栏,而是隐藏它并创建我自己的导航栏。这使得在应用程序中使用自定义和更高级的设计变得更加容易。

你可以使用这个

获取导航栏和状态栏的高度
  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)
  }

我已经使用native方法获取导航栏包括状态栏的高度。使用这行代码获取导航栏高度并根据您的要求使用。这对我来说在所有设备和不同的 iOS 版本上都非常有效。

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

迄今为止我发现的最佳方法,无需创建导航控制器实例:

[self.navigationBar sizeThatFits:CGSizeZero].height;

顺便一提,它也支持屏幕方向改变。