【问题标题】:How to prevent gap between uinavigationbar and view in iOS 13?如何防止 iOS 13 中的 uinavigationbar 和视图之间的间隙?
【发布时间】:2019-09-04 08:37:17
【问题描述】:

我们目前在 iOS 13 中使用模式演示时遇到导航栏大小问题。

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

然而,在一些屏幕中,我们得到了这种奇怪的效果,导航栏的高度较低,并且在它和视图之间有一个奇怪的“透视”间隙。如此屏幕截图所示:

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

即使使用 iOS 13 SDK 构建,iOS 12 也不会出现此问题。这是 iOS 13(beta 8)中的一个已知问题,还是我们应该在代码/情节提要中进行调整?

【问题讨论】:

  • 没见过,能提供样例项目吗?
  • @LeonLucardie 嗨,也许这应该在 ios 13 稳定版发布后解决。
  • @JuniorJiang-MSFT 是的。在 iOS 13/XCode GM 版本发布后,我将再次检查此问题。由于它也发生在 XCode Swift/ObjC 项目中(可以在测试项目中看到),我们至少可以排除任何与 Xamarin 相关的问题。
  • @JuniorJiang-MSFT 不幸的是,iOS 13 和 XCode 11 的稳定 (GM) 版本中似乎仍然存在该问题
  • @LeonLucardie 听到这个消息很难过。XCode Swift/ObjC 项目中也会发生这种情况吗?

标签: ios xamarin storyboard uikit uinavigationbar


【解决方案1】:
override func viewWillAppear(_ animated: Bool) {  
    super.viewWillAppear(animated)  
    if #available(iOS 13.0, *) {  
        navigationController?.navigationBar.setNeedsLayout()  
    }
}  

我们在 here 附近找到了这项工作,它对我们有用。

【讨论】:

    【解决方案2】:

    喜欢 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()
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-28
      • 1970-01-01
      • 2020-05-25
      • 1970-01-01
      • 2018-03-29
      • 1970-01-01
      相关资源
      最近更新 更多