Xcode 11 和 iOS 13 模态 ViewController 丢失黑色覆盖

Xcode 11 and iOS 13 Modal ViewController lost black overlay

我有一个 UIViewController A,它以模态方式呈现另一个 UIViewController B,它只占据屏幕高度的下半部分。

当我还在使用 Xcode 10 时,当出现模态 ViewController B 时,深色覆盖层将覆盖 ViewController A 并且我还将设置 view.alpha 的 ViewController A 到 0.5 使用这些方法:

func presentBottomSheet() {

  let viewController = BottomSheetModalVC()
  viewController.modalPresentationStyle = .overCurrentContext

  DispatchQueue.main.async { [weak self] in
        self?.dimParent()
        self?.parentViewController?.present(viewController, animated: true, completion: nil)
  }
}

func dimParent() {
 UIView.transition(with: parentVC.view, duration: 0.6, options: [.curveEaseOut], animations: {
   parentVC.view.alpha = 0.5
 })
}

为了将用户的焦点转移到模态视图。然而,当我尝试用 Xcode 11 编译它时,黑色覆盖完成,我留下了一个父视图,当模态视图从底部向上滑动时,它只变得一半可见。这种叠加行为是否发生了变化?

我的屏幕看起来与此类似。但是在 Xcode 11 之后,黑色覆盖层不再存在,给我留下了一个完全透明的覆盖层。

在 ViewControllerB 中创建一个 UIView。在你的情况下它的 BottomSheetModalVC

var backgroundView: UIView = {
    let view = UIView()
    view.backgroundColor = UIColor.black.withAlphaComponent(0.7)
    return view
}()

将 backgroundView 作为子视图添加到 presentingViewController 的视图中

override func viewWillLayoutSubviews() {
    presentingViewController?.view.addSubview(backgroundView)
    backgroundView.frame = presentingViewController?.view.bounds ?? .zero
}

在 viewWillDisappear 中删除此 backgroundView

override func viewWillDisappear(_ animated: Bool) {
       super.viewWillDisappear(animated)
       UIView.animate(withDuration: 0.3) {
           self.backgroundView.removeFromSuperview()
       }
}

找到我自己对这个愚蠢问题的答案。

所以显示 ViewController A 和 B 的 UINavigationController 的背景颜色设置为白色,所以当 ViewController A 的 alpha 设置为 0.5 时,它看起来就像消失了但不调光。

我已经将我的 NavigationController 背景颜色设置为黑色,现在一切都恢复正常了。