导航栏的内容在 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];
    }
}