ios – 阴影效果无法正确显示UIView

前端之家收集整理的这篇文章主要介绍了ios – 阴影效果无法正确显示UIView前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个登录屏幕,如下所示.在每个文本字段周围,我添加了一个视图,对于该视图,我想显示一个投影.我有点实现了我的尝试,但这件事不适用于iPhone Plus(6,8)设备.

你可以看到下面的区别.

iPhone 8: –

iPhone 8: –

这是我的代码

extension UIView {
    func addShadow() {        
        layer.cornerRadius = 8
        layer.masksToBounds = true

        layer.shadowColor = UIColor.lightGray.cgColor
        layer.shadowOffset = CGSize(width: 0,height: 1.0)
        layer.shadowRadius = 2.0
        layer.shadowOpacity = 0.5
        layer.masksToBounds = false

        layer.shadowPath = UIBezierPath(roundedRect: self.bounds,cornerRadius:8).cgPath
    }
}

我怎么能正确解决这个问题?

解决方法

由于视图可能会调整大小,因此您应该在调整大小后更新shadowPath,因为它具有固定大小.不幸的是,这不能在扩展中完成,因为您需要覆盖layoutSubview().但是,您可以再次从视图控制器中为每个文本字段调用viewDidLayoutSubviews()中的addShadow().

您也可以修改您的扩展程序以仅更新路径:

extension UIView {
    func addShadow() {        
        layer.cornerRadius = 8

        layer.shadowColor = UIColor.lightGray.cgColor
        layer.shadowOffset = CGSize(width: 0,height: 1.0)
        layer.shadowRadius = 2.0
        layer.shadowOpacity = 0.5
        layer.masksToBounds = false

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

有了这个,您应该从viewDidLayoutSubviews()为每个带阴影的视图调用updateShadow().

如果为文本字段使用自定义子类,则可以将updateShadow()调用放入layoutSubviews().所以你不需要从视图控制器调用它.

猜你在找的iOS相关文章