Swift - UINavigationBar有时只包括在屏幕高度?

时间:2016-10-08 11:32:01

标签: swift uitableview uinavigationbar

所以我遇到了一些奇怪的(在我看来)问题。我有一个标准的UINavigationController与根UIViewController。

我正在以编程方式向视图控制器添加UITableView。当我设置表格视图的框架时,我将其设置为:

tableView.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height)

当我运行模拟器时,有时桌面视图完美定位 - 坐在导航栏下方。但是,有时(看似随意)桌面视图位于导航栏下方的屏幕顶部。

我试图将tableview的Y坐标更改为

(self.navigationController?.navigationBar.frame.height)!

但现在相反的情况发生了:有时桌面视图定位正确,但有时候导航栏下面会出现导航条大小的间隙,在桌面视图上方。

我很遗憾发生了什么 - 也许这与创建导航栏时有关?

提前致谢。

1 个答案:

答案 0 :(得分:0)

尝试以下代码...在Xcode 8中测试它有效....你提到了navBar下出现的间隙。因为你没有在你的代码中输入statusBar高度。

    override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    yourTableView.frame = CGRect(x: 0, y: -(UINavigationController().navigationBar.frame.height + UIApplication.shared.statusBarFrame.size.height), width: view.frame.width, height: view.frame.height + (UINavigationController().navigationBar.frame.height + UIApplication.shared.statusBarFrame.size.height))

    print((UINavigationController().navigationBar.frame.height)) // 44.0
    print(UIApplication.shared.statusBarFrame.size.height)  // 20.0

    //You can include this code in viewDidAppears.if your view has a transition...
}

上面的代码会将你的tableview放在navigationBar.Hope下面,这有助于......