状态栏上方的导航栏

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 为我工作

以上是关于状态栏上方的导航栏的主要内容,如果未能解决你的问题,请参考以下文章

如何添加覆盖所有其他视图(包括导航栏和状态栏)的暗屏?

iOS 状态栏更改颜色

iOS 状态栏不会一直亮

Android 显示、隐藏状态栏和导航栏

状态栏、导航栏、PopupWindow的使用

iOS 获取状态栏、导航栏、tabBar高度