【问题标题】:iOS 13 UIViewController modal presentation shadowiOS 13 UIViewController 模态演示阴影
【发布时间】:2019-09-26 13:04:46
【问题描述】:

我已经在 iOS >=13 中展示了视图控制器。根视图具有清晰的背景:

view.backgroundColor = .clear

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

一切正常,但是当我尝试通过向下滑动将其关闭时,我看到呈现的视图控制器的阴影略微可见:

是否可以在模态演示中消除这种阴影?

【问题讨论】:

    标签: ios uiviewcontroller ios13


    【解决方案1】:

    更新:经过进一步调查,这似乎不是可以改变的。这是 iOS 的私有 UIKit View 设置,是 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 }

    【讨论】:

    • 感谢您的回答!我在 ios 13 上为 iPhone 尝试过,不适合我。
    • 是否有“子类化”已经制作的 UIModalPresentationStyle 并简单地删除该阴影?
    【解决方案2】:

    我有办法给你

    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()
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-05
      • 1970-01-01
      • 2020-06-27
      • 1970-01-01
      • 2019-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多