如何防止iOS 13中的uinavigationbar和视图之间出现间隙?
在iOS 13中使用模式演示时,我们目前在导航栏大小方面存在问题 在大多数情况下,这很好,如本屏幕截图所示: 然而,在一些屏幕中,我们得到了这种奇怪的效果,导航栏的高度较低,在它和视图之间有一个奇怪的“透视”间隙。如本截图所示: 两个视图控制器的属性设置值相同,以模式显示,并且在其子视图上具有相同的约束(与superview/margins/top layout guide的间距为0) 这个问题在iOS 12中不会发生,即使是使用iOS 13 SDK构建的。这是iOS 13(beta 8)中的已知问题,还是我们应该在代码/情节提要中进行调整如何防止iOS 13中的uinavigationbar和视图之间出现间隙?,ios,xamarin,storyboard,uikit,uinavigationbar,Ios,Xamarin,Storyboard,Uikit,Uinavigationbar,在iOS 13中使用模式演示时,我们目前在导航栏大小方面存在问题 在大多数情况下,这很好,如本屏幕截图所示: 然而,在一些屏幕中,我们得到了这种奇怪的效果,导航栏的高度较低,在它和视图之间有一个奇怪的“透视”间隙。如本截图所示: 两个视图控制器的属性设置值相同,以模式显示,并且在其子视图上具有相同的约束(与superview/margins/top layout guide的间距为0) 这个问题在iOS 12中不会发生,即使是使用iOS 13 SDK构建的。这是iOS 13(beta 8)中
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
if #available(iOS 13.0, *) {
navigationController?.navigationBar.setNeedsLayout()
}
}
我们找到了这个解决方案,它对我们很有效。就像罗德的答案一样,但我发现只有在下一个主线程runLoop中放入setneetslayet()时,它才有效:
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()
}
}
}
从未见过,你能提供示例项目吗?@LeonLucardie Hi,也许这应该在ios 13稳定版发布后解决。@JuniorJiang MSFT是的。在iOS 13/XCode GM版本发布后,我将再次检查此问题。由于它也发生在XCode Swift/ObjC项目中(如测试项目中所示),我们至少可以排除任何与Xamarin相关的问题。@JuniorJiang MSFT不幸的是,这个问题似乎仍然发生在iOS 13和XCode的稳定(GM)版本中11@LeonLucardie听到这个消息很难过。这也发生在XCode Swift/ObjC项目中吗?