如何防止 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()
}
}
}
我们目前在 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()
}
}
}