如何去除某些 iPhone 中多余的黑影,同时在 swift 中为 UIView 提供阴影?

How to remove extra black shadow in some iPhones while giving shadow for UIView in swift?

提问人:Swift 提问时间:1/13/2020 最后编辑:nopassport1Swift 更新时间:1/13/2020 访问量:179

问:

我给三个视图提供了阴影。iPhone 8 plus、iPhone 11、iPhone 11 pro max中的阴影完美呈现,如下图所示

correct shadow

我在 iPhone 8、iPhone 7 plus、iPhone 7 的右侧出现深黑色阴影,为什么?如下图

black colour

如何在iPhone8中去除右侧的黑色。

以下 UIView 阴影代码:

firstContainerView.clipsToBounds = false
firstContainerView.layer.shadowColor = UIColor.black.cgColor
firstContainerView.layer.shadowOpacity = 1
firstContainerView.layer.shadowOffset = CGSize(width: 0.2, height: 0.2)
firstContainerView.layer.shadowRadius = 1
firstContainerView.layer.shadowPath = UIBezierPath(roundedRect: 
firstContainerView.bounds, cornerRadius: cornerRadius).cgPath

为什么某些设备会出现额外的黑影。 请帮我从iPhone 8,iPhone 7 plus的阴影中去除多余的黑色。

Swift iPhone UIView 阴影

评论


答:

2赞 Vadim Nikolaev 1/13/2020 #1

根据这个答案,你可以用你的参数创建扩展:

extension UIView {
    func addShadow() {
        layer.shadowColor = UIColor.black.cgColor
        layer.shadowOffset = CGSize(width: 0.2, height: 0.2)
        layer.shadowRadius = 1
        layer.shadowOpacity = 1
        layer.masksToBounds = false

        updateShadow()
    }
    func updateShadow() {
        layer.shadowPath = UIBezierPath(roundedRect: self.bounds,cornerRadius: 5).cgPath
    }
}

并像这里一样调用它viewDidLayoutSubviews()

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()

    viewTest.addShadow()
}

我希望这对iPhone 7等有所帮助。

评论

0赞 Swift 1/13/2020
是的,它完美地工作,我可以知道我在上面的帖子中犯了什么错误。为什么我用来获得额外的黑色??为什么我没有得到你的答案?
1赞 Vadim Nikolaev 1/13/2020
@iPhoneDev我想说这与视图控制器的生命周期有关。您可以签入,iPhone 7/8 的尺寸很可能会有所不同,但 iPhone 8 Plus 也是如此(为什么 - 老实说,我不知道),因为 сalled 通知视图控制器其视图刚刚布置了它的子视图。因此,有必要根据视图控制器上有关我们大小的当前(最新)信息来更新我们。viewTest.boundsviewDidLoad()viewDidLayoutSubviewsviewDidLayoutSubviewsshadowPathview