我已经在 iOS >=13 中以模式方式呈现了视图控制器。根视图有清晰的背景:
view.backgroundColor = .clear
白色背景的子视图有一些顶部偏移,如下所示:
一切都很好,但是当我尝试通过向下滑动来关闭它时,我看到所呈现的视图控制器有轻微可见的阴影:
是否可以删除模式呈现上的阴影?
更新:经进一步调查,这似乎无法更改。它是 iOS 设置的私有 UIKit 视图,是 iOS 13 中的新增功能。请参阅 19:50 https://developer.apple.com/videos/play/wwdc2019/224/
对于我自己的应用程序/游戏,我将寻求创建一个自定义 UIModalPresentationStyle 来实现我想要的外观。
您还可以通过简单地呈现为 .fullScreen 或其他呈现样式而不是这种新的工作表方法来缓解此问题。
我有办法给你
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()
}
可能是一个更好的技巧:您需要找到 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()