状态栏上方的导航栏
Posted
技术标签:
【中文标题】状态栏上方的导航栏【英文标题】:Navigation bar above status bar 【发布时间】:2021-04-30 17:33:29 【问题描述】:我在将“MyTabBarController”推离屏幕太远时遇到问题。我有一个普通的视图控制器,带有一个打开“MyTabBarController”的按钮,本质上是屏幕上的一个弹出窗口。对于普通的 ViewController,我对这段代码没有任何问题,但是对于 TabBarController + Embedded Nav Bar,它会导致一些问题。标签栏也被推离屏幕底部。我确定这与框架约束有关,但不确定如何,因为我尝试了不同的策略。弹出窗口的框架等于前一个视图的框架,所以我有点不知所措。如果您需要更多信息,请告诉我。
let vc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier:
"MyTabBarController") as! MyTabBarController
self.addChild(vc)
vc.view.frame = self.view.frame
self.view.addSubview(vc.view)
vc.didMove(toParent: self)
【问题讨论】:
试试vc.view.frame = self.view.bounds
产生同样的问题。
而不是将子视图直接添加到 self.view 使用另一个视图并将约束添加到安全区域。因为self.view考虑导航栏+状态栏。
如果你做类似vc.view.safeAreaInsets = self.view.safeAreaInsets
的事情会怎样?
使用约束代替框架:vc.view.translatesAutoresizingMaskIntoConstraints = false NSLayoutConstraint.activate([ vc.view.leadingAnchor.constraint(equalTo: self.view.leadingAnchor), vc.view.trailingAnchor.constraint(equalTo: self.view.trailingAnchor), vc.view.topAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.topAnchor), vc.view.bottomAnchor.constraint(equalTo: self.view.bottomAnchor) ])
【参考方案1】:
我认为这将解决问题
vc.view.frame = self.view.safeAreaLayoutGuide.layoutFrame
【讨论】:
现在就这样做。显示半正确,只需要用相同的颜色填充顶部。图片 -> ibb.co/HGShfbh 你可以试试 yournavigationbar.isTranslucent = false 同样的问题。嗯 能否提供给viewcontroller添加标签栏的代码?vc.view.frame = self.view.frame
和 isTranslucent = false 为我工作以上是关于状态栏上方的导航栏的主要内容,如果未能解决你的问题,请参考以下文章