Swift - UINavigationBar 有时仅包含在屏幕高度中?

Posted

技术标签:

【中文标题】Swift - UINavigationBar 有时仅包含在屏幕高度中?【英文标题】:Swift - UINavigationBar only sometimes included in screen height? 【发布时间】:2016-10-08 11:32:00 【问题描述】:

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

我正在以编程方式将 UITableView 添加到视图控制器。我在设置table view的frame的时候,设置为:

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

当我运行模拟器时,有时 tableview 的位置很完美 - 就在导航栏的下方。但是,有时(似乎是随机的)tableview 位于屏幕顶部,位于导航栏下方。

我尝试将tableview的Y坐标改为

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

但现在情况正好相反:有时 tableview 定位正确,但有时导航栏下方出现导航栏大小的间隙,在 tableview 上方。

我对正在发生的事情感到很迷茫 - 也许这与创建导航栏的时间有关?

提前致谢。

【问题讨论】:

look here may solve your problem 告诉我。 你在哪里创建你的 uitableview? in viewdidload. 【参考方案1】:

尝试下面的代码...在 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...

以上代码会将您的表格视图定位在导航栏下方。希望这会有所帮助...

【讨论】:

对不起,我离开了。不幸的是,这不是问题 - 间隙与导航栏的大小相同 - 比状态栏的高度大得多。不过感谢您的回答! @danmartin 这可能是模拟器的错误。尝试重置它或在真实设备上测试您的代码。谢谢

以上是关于Swift - UINavigationBar 有时仅包含在屏幕高度中?的主要内容,如果未能解决你的问题,请参考以下文章

Swift - UINavigationBar 有时仅包含在屏幕高度中?

Uiwebview 用 Swift 隐藏/显示 UInavigationbar

UINavigationBar.appearance().tintColor 在 Swift 中不起作用

如何在 Swift 中增加自定义 UINavigationBar 类的高度

在 iOS 11 Swift 4 上应用渐变后 UINavigationBar 标题和按钮消失

在swift中更改UINavigationBar中UIBarButtonItem的宽度