我有一个登录屏幕,如下所示。我在每个文本字段周围添加了一个 View ,并且我想为该 View 显示一个投影。我有点实现了我的尝试,但这个东西不适用于 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
}
}
我该如何正确解决这个问题?
最佳答案
由于 View 可能会调整大小,因此您应该在调整大小后更新您的 shadowPath
,因为它具有固定大小。不幸的是,这不能在扩展中完成,因为您需要覆盖 layoutSubview()
。但是您可以从 View Controller 再次为每个文本字段从 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()
为每个带有阴影的 View 调用 updateShadow()
。
如果您为文本字段使用自定义子类,您可以将 updateShadow()
调用放入 layoutSubviews()
。所以你不需要从 View Controller 调用它。
关于ios - UIView 的阴影效果显示不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49664951/