获取iOS上NavigationBar的默认高度(或maxY)

时间:2018-05-15 10:55:01

标签: ios swift uinavigationbar

我想知道我们是否有办法获得height的默认导航栏maxYNavigationController优先)。

知道iOS 11引入了大型游戏,我们有什么方法可以获得带有“小标题”和导航栏的导航栏的默认height(或maxY)有一个“大标题”?

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

self.navigationController?.navigationBar.frame.maxY

它返回的数字高于预期:/

我试图在很多回调中运行这段代码 - > onViewWillAppearonViewDidAppearonViewDidLoad

4 个答案:

答案 0 :(得分:2)

您可以使用此

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

答案 1 :(得分:2)

我使用本机方法获取导航栏的高度,包括状态栏。使用此行代码获取导航栏高度并根据您的要求使用。这对我来说非常适合所有设备和设备。不同的iOS版本。

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

答案 2 :(得分:0)

这对我有用

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

即使很难你的方法可能是最好的解决方案我主要尝试不使用本机导航栏但隐藏它并创建我自己的。这样可以更轻松地在应用程序中使用自定义和更高级的设计。

答案 3 :(得分:0)

到目前为止,我发现的最好方法是无需创建导航控制器实例:

[self.navigationBar sizeThatFits:CGSizeZero].height;

而且,它还支持屏幕方向更改。