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 类的高度