调用

时间:2018-12-28 20:10:42

标签: ios swift uinavigationcontroller uistatusbar

我有一个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视图的高度过高,从而使我的主要内容在顶部不可见。

如何考虑到这一点?

1 个答案:

答案 0 :(得分:0)

我现在通过添加一个自定义视图来解决此问题,该视图具有document.querySelector('form').addEventListener('submit', function (e) { e.preventDefault(); }, false); 所需的backgroundColor。然后,将 constraints 的顶部设置为navigationBar,底部设置为view.topAnchor。这是介于屏幕顶部和view.safeAreaLayoutGuide.topAnchor顶部之间的范围,该范围恰好位于safeAreaLayoutGuide的下方。

我不确定这是否是最好的解决方案,所以请告诉我是否有更好的方法和/或使用此方法可能会遇到什么问题。