iOS: 13 - 删除状态栏和滚动视图之间的 space

iOS: 13 - remove space between status bar and scrollview

最近,我将我的 Xcode 从 10.1 更新到 11.3,当我 运行 我的应用程序在模拟器上使用 iOS 13 时,我注意到一些功能发生了变化,我看到状态栏和我用于主页的滚动视图之间有一个space,请看附图:

https://i.stack.imgur.com/uoFE7.png

https://i.stack.imgur.com/Rb0FV.png

如何修复?

那是因为您用来显示视图控制器的代码。

方法 present(_ viewControllerToPresent: UIViewController, animated flag: Bool, completion: (() -> Void)? = nil) 将以模态方式显示您的视图控制器。 https://developer.apple.com/documentation/uikit/uiviewcontroller

如果您不想要这种效果,则必须使用 pushViewController(_ viewController: UIViewController, animated: Bool) https://developer.apple.com/documentation/uikit/uinavigationcontroller

虽然罗伯托的回答并非完全错误,但您仍然可以使用 present(...) 并通过设置呈现的控制器的转换来实现所需的 UI:

let vc = // initiate
vc.modalPresentationStyle = .fullScreen
present(vc, animation: true, completion: nil)

您遇到的是 iOS 13 中的新默认行为,拥有它非常好(您可以下拉新控制器以关闭它)。

当然,这会导致以这种方式呈现新控制器的旧应用程序表现不同。

如果可以推送视图控制器,请考虑 Roberto 的回答。如果使用礼物:

故事板解决方案:

如果您仍想使用 present,请在故事板中将 segue presentation 更改为 Full Screen

以编程方式:

let vc = UIStoryboard(name: "Main", bundle: Bundle.main).instantiateViewController(withIdentifier: "yourVC") as! YourVC
    vc.modalPresentationStyle = .fullScreen // add this
    self.present(vc, animated: true, completion: nil)