iOS 13 UIViewController 模态演示阴影

Posted

技术标签:

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

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

view.backgroundColor = .clear

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

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

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

【问题讨论】:

【参考方案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()

【讨论】:

以上是关于iOS 13 UIViewController 模态演示阴影的主要内容,如果未能解决你的问题,请参考以下文章

iOS13 UIViewController isModalInPresentation 在 ObjectiveC 中没有设置器所以不能设置?

Xcode 11 & iOS13,使用 UIKIT 不能改变 UIViewController 的背景颜色

iOS Xcode 中的 UIViewController 中的 UIView 中的 UITableView

iOS3、iOS4、xibbed UIViewController 及显示数据

iOS13中具有多个窗口场景的***视图控制器

控制器在 iOS 13 中呈现模式时的 UINavigationBar 高度