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