我有一个UINavigationController
,其中我为所有navigationBar
定义了UIViewControllers
,如下所示:
navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
navigationController?.navigationBar.shadowImage = UIImage()
navigationController?.navigationBar.isTranslucent = true
我这样做是因为有一些看法,
例如:用户的个人资料视图,需要透明才能显示用户名和个人资料图片后面的backgroundImage
。
这当然意味着navigationBar
的高度为零,因此我需要相应地设置所有视图,并将topAnchors固定在view.safeAreaLayoutGuide.topAnchor
上。
我将继续计算navigationBar
的高度。我得到高度的代码是:
navBarHeight = UIApplication.shared.statusBarFrame.height + (self.navigationController?.navigationBar.frame.height)!
这就像一个护身符。然后,我可以创建一个高度设置为navBarHeight
的自定义UIView,在常规视图中添加所需的颜色,并且效果很好。
但是,当状态栏中出现某些问题时,此操作将无效。
例如:当我打电话时,或者当我的个人住宅具有活动连接时,当我录音(语音或屏幕)时,statusBar和状态栏中会显示红色,绿色或蓝色覆盖高度增加。如果然后打开我的应用程序,则高度不正确,并且navigationBar
视图的高度过高,从而使我的主要内容在顶部不可见。
如何考虑到这一点?
答案 0 :(得分:0)
我现在通过添加一个自定义视图来解决此问题,该视图具有document.querySelector('form').addEventListener('submit', function (e) {
e.preventDefault();
}, false);
所需的backgroundColor
。然后,将 constraints 的顶部设置为navigationBar
,底部设置为view.topAnchor
。这是介于屏幕顶部和view.safeAreaLayoutGuide.topAnchor
顶部之间的范围,该范围恰好位于safeAreaLayoutGuide
的下方。
我不确定这是否是最好的解决方案,所以请告诉我是否有更好的方法和/或使用此方法可能会遇到什么问题。