iOS 13 UIViewController 模态呈现阴影

问题描述 投票:0回答:3

我已经在 iOS >=13 中以模式方式呈现了视图控制器。根视图有清晰的背景:

view.backgroundColor = .clear

白色背景的子视图有一些顶部偏移,如下所示:

一切都很好,但是当我尝试通过向下滑动来关闭它时,我看到所呈现的视图控制器有轻微可见的阴影:

是否可以删除模式呈现上的阴影?

ios uiviewcontroller ios13
3个回答
2
投票

更新:经进一步调查,这似乎无法更改。它是 iOS 设置的私有 UIKit 视图,是 iOS 13 中的新增功能。请参阅 19:50 https://developer.apple.com/videos/play/wwdc2019/224/

对于我自己的应用程序/游戏,我将寻求创建一个自定义 UIModalPresentationStyle 来实现我想要的外观。

您还可以通过简单地呈现为 .fullScreen 或其他呈现样式而不是这种新的工作表方法来缓解此问题。


我自己一直在努力寻找这个问题的答案。到目前为止,我只发现通过设置layer.shadowColor来清除它可以修复这个问题,但仅限于iPhone。我找不到如何在 iPad 上修复此问题。 覆盖 func viewDidLoad() { view.layer.shadowColor = UIColor.clear.cgColor }

1
投票

我有办法给你

extension UIViewController {
    func removeBackgroundForParents() {
        var superview = view.superview
        while superview != nil {
            superview?.layer.backgroundColor = UIColor.clear.cgColor
            superview?.layer.shadowColor = UIColor.clear.cgColor
            superview = superview?.superview
        }
    }
}

并在视图控制器中使用它。

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    
    removeBackgroundForParents()
}

0
投票

可能是一个更好的技巧:您需要找到 UIDimmingView 类的超级视图并将其隐藏。

private extension UIView {

    func removeDimming() {
        if let dim = subviews(ofClass: "UIDimmingView").first {
            dim.isHidden = true
        }
        else {
            superview?.removeDimming()
        }
    }

    func subviews(ofClass name: String) -> [UIView] {
        subviews.filter { String(describing: type(of: $0)) == name } +
            subviews.flatMap { $0.subviews(ofClass: name) }
    }
}

然后在你的视图控制器的

viewDidLayoutSubviews()

    view.superview?.removeDimming()
© www.soinside.com 2019 - 2024. All rights reserved.