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 背景颜色设置为黑色,现在一切都恢复正常了。
我有一个 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 背景颜色设置为黑色,现在一切都恢复正常了。