首页 > 解决方案 > 仅在 iOS 13.1 和 13.2 中弹出视图背后的奇怪阴影

问题描述

即使弹出背景颜色很明显,弹出视图后面有一个奇怪的阴影,此问题仅在 13.1 和 13.2 中发生,并且在 13 及以下版本中运行良好

我可以在视图层次结构中看到 UIWindow/UITransitionView/_UICutoutShadowView 具有仅在 13.1 中具有阴影图像的图像视图,但图像视图在 13 中具有空图像

controller.modalPresentationStyle = .popover
controller.popoverPresentationController?.permittedArrowDirections = .up
controller.popoverPresentationController?.delegate = controller
controller.popoverPresentationController?.sourceView = sourceView
controller.popoverPresentationController?.popoverBackgroundViewClass = FilterBackgroundView.self
present(controller, animated: false)

奇怪的影子图片

标签: iosswiftios13uipopovercontrolleruipopover

解决方案


在 UI 检查中有一个 _UICutoutShadowView 类型的 UIImageView 导致它。所以我设法通过创建一个自定义 UIPopoverBackgroundView 并隐藏这个幽灵视图来解决这个问题。

override func didMoveToWindow() {
    super.didMoveToWindow()
    if #available(iOS 13, *) {
        // iOS 13 (or newer)
        if let window = UIApplication.shared.keyWindow {
            let transitionViews = window.subviews.filter { String(describing: type(of: $0)) == "UITransitionView" }
            for transitionView in transitionViews {
                let shadowView = transitionView.subviews.filter { String(describing: type(of: $0)) == "_UICutoutShadowView" }.first
                shadowView?.isHidden = true
            }
        }
    }
}

推荐阅读