如何防止 uinavigationbar 和 iOS 13 中的视图之间出现间隙?

How to prevent gap between uinavigationbar and view in iOS 13?

我们目前在 iOS 13.

中使用模态显示时遇到导航栏大小调整问题

在大多数情况下,这可以正常工作,如以下屏幕截图所示:

然而,在一些屏幕中,我们得到了这种奇怪的效果,导航栏的高度较低,并且它与视图之间存在奇怪的 "see-through" 间隙。如此屏幕截图所示:

两个视图控制器都为其属性设置了相同的值,以模态方式呈现并且对其子视图具有相同的约束(与 superview/margins/top 布局指南的间距为 0)。

此问题不会在 iOS 12 中发生,即使使用 iOS 13 SDK 构建也是如此。这是 iOS 13 (beta 8) 中的已知问题,还是我们应该在 code/storyboard 中进行调整?

override func viewWillAppear(_ animated: Bool) {  
    super.viewWillAppear(animated)  
    if #available(iOS 13.0, *) {  
        navigationController?.navigationBar.setNeedsLayout()  
    }
}  

我们发现这项工作围绕 here 并且对我们有用。

就像 Rod 的回答一样,但我发现它只有在我将 setNeetsLayout() 放在下一个主线程 runLoop 中时才有效:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    // Workaround for iOS 13 modal gap below navigationbar
    if #available(iOS 13.0, *) {
        DispatchQueue.main.async {
            self.navigationController?.navigationBar.setNeedsLayout()
        }
    }
}