我有一个登录屏幕如下.在每个文本字段周围,我添加了一个视图,对于该视图,我想显示一个投影.我有点实现了我的尝试,但这件事不适用于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
}
}
Run Code Online (Sandbox Code Playgroud)
我怎么能正确解决这个问题?
由于视图可能会调整大小,因此您应该shadowPath在调整大小后更新您的视图,因为它具有固定大小。不幸的是,这不能在扩展中完成,因为您需要覆盖layoutSubview(). 但是,你可以调用addShadow()从viewDidLayoutSubviews()您的视图控制器再次对每个文本字段。
您还可以修改您的扩展程序以仅更新路径:
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
}
}
Run Code Online (Sandbox Code Playgroud)
有了这个,你应该叫updateShadow()从viewDidLayoutSubviews()与阴影每个视图。
如果您为文本字段使用自定义子类,则可以将updateShadow()调用放入layoutSubviews(). 所以你不需要从视图控制器调用它。
| 归档时间: |
|
| 查看次数: |
685 次 |
| 最近记录: |