导航栏的内容在 iOS 13 的模态中部分不可见
Navigation Bar's content partially not visible in modal on iOS 13
当导航栏显示在模态屏幕中时,基于情节提要的应用程序在呈现导航栏内容时出现问题,但仅当在物理设备上时。代码在 iOS 12 和所有模拟器中都正常运行 iOS 12 和 iOS 13.2.2.
截图左边是iPhone11模拟器运行ningiOS13.2.2;右边是我的 iPhone Xs 运行ning iOS 13.2.2 相同代码的 Reflector 投影。我们可以看到 table 视图和物理设备上的导航栏内容之间有一个 space,但在模拟器上 table 视图与导航栏齐平。
没有 table 剖面视图 headers,table视图边距设置为安全区域。有没有其他人遇到过这个问题,如果有,你是如何解决的?
这是从设备捕获的堆栈视图的快照,其中我们可以清楚地看到 mis-rendered 的区域完全在 UINavigationBar 的边缘内:
在设置以下视图结构时,我还能够在一个全新的项目中重现该问题:
运行 此演示项目的代码可在 GitHub 上获得:https://github.com/ekscrypto/Whosebug-59033294
不同的行为:
我们可以看到物理设备在导航栏的内容和 table 视图之间显示一条红色;但是那个红色条在模拟器中是不可见的。
编辑:2019-11-25 16:45 美国东部时间——根据下面的评论,我尝试使用以下方法强制刷新布局:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
if #available(iOS 13.0, *) {
DispatchQueue.main.async {
self.navigationController?.navigationBar.setNeedsLayout()
self.navigationController?.navigationBar.layoutIfNeeded()
}
}
}
有无分派异步,有无layoutIfNeeded;它没有为我解决这个特殊问题。
根据 上的答案,这对我不起作用,我使用以下代码解决了我的问题:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
if #available(iOS 13.0, *) {
self.navigationController?.setNavigationBarHidden(true, animated: false)
self.navigationController?.setNavigationBarHidden(false, animated: false)
}
}
或在Objective-C:
-(void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
if(@available(iOS 13, *)) {
[self.navigationController setNavigationBarHidden:true animated:false];
[self.navigationController setNavigationBarHidden:false animated:false];
}
}
当导航栏显示在模态屏幕中时,基于情节提要的应用程序在呈现导航栏内容时出现问题,但仅当在物理设备上时。代码在 iOS 12 和所有模拟器中都正常运行 iOS 12 和 iOS 13.2.2.
截图左边是iPhone11模拟器运行ningiOS13.2.2;右边是我的 iPhone Xs 运行ning iOS 13.2.2 相同代码的 Reflector 投影。我们可以看到 table 视图和物理设备上的导航栏内容之间有一个 space,但在模拟器上 table 视图与导航栏齐平。
没有 table 剖面视图 headers,table视图边距设置为安全区域。有没有其他人遇到过这个问题,如果有,你是如何解决的?
这是从设备捕获的堆栈视图的快照,其中我们可以清楚地看到 mis-rendered 的区域完全在 UINavigationBar 的边缘内:
在设置以下视图结构时,我还能够在一个全新的项目中重现该问题:
运行 此演示项目的代码可在 GitHub 上获得:https://github.com/ekscrypto/Whosebug-59033294
不同的行为:
我们可以看到物理设备在导航栏的内容和 table 视图之间显示一条红色;但是那个红色条在模拟器中是不可见的。
编辑:2019-11-25 16:45 美国东部时间——根据下面的评论,我尝试使用以下方法强制刷新布局:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
if #available(iOS 13.0, *) {
DispatchQueue.main.async {
self.navigationController?.navigationBar.setNeedsLayout()
self.navigationController?.navigationBar.layoutIfNeeded()
}
}
}
有无分派异步,有无layoutIfNeeded;它没有为我解决这个特殊问题。
根据
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
if #available(iOS 13.0, *) {
self.navigationController?.setNavigationBarHidden(true, animated: false)
self.navigationController?.setNavigationBarHidden(false, animated: false)
}
}
或在Objective-C:
-(void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
if(@available(iOS 13, *)) {
[self.navigationController setNavigationBarHidden:true animated:false];
[self.navigationController setNavigationBarHidden:false animated:false];
}
}