如何从我在iOS中的View中访问NavigationController的导航栏大小?

时间:2016-02-24 19:02:31

标签: ios swift xcode navigationbar navigationcontroller

我以编程方式完成所有操作,并且没有故事板。我使用的是Swift2.0,而且我是初学者。我的应用程序结构非常简单:

在我的AppDelegate中,我正在初始化UINavigationController和一个ViewController,并将我的ViewController添加到我的navigationController。

在我的ViewController loadView()方法中,我初始化了我的观点:self.view = myView()

所以现在我在myView类中,我正在尝试构建我的视图(制作4个按钮,添加约束)。现在当我想制作我的按钮时,我需要知道navigationController的navigationBar尺寸(高度)。

如何从View类访问它?这样做的最佳方式是什么?

谢谢。

1 个答案:

答案 0 :(得分:0)

如果您想要顶栏的精确高度(导航栏+状态栏),请尝试此操作:

<强>目标C

CGFloat topbarHeight = ([UIApplication sharedApplication].statusBarFrame.size.height +
       (self.navigationController.navigationBar.frame.size.height ?: 0.0));

Swift 4

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

为方便起见,请尝试使用此UIViewController扩展

extension UIViewController {

    /**
     *  Height of status bar + navigation bar (if navigation bar exist)
     */

    var topbarHeight: CGFloat {
        return UIApplication.shared.statusBarFrame.size.height +
            (self.navigationController?.navigationBar.frame.height ?? 0.0)
    }
}

Swift 3

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