【发布时间】:2019-04-10 16:48:23
【问题描述】:
我已经写了这个自定义按钮类
class RoundedButton: UIButton {
override func awakeFromNib() {
layer.cornerRadius = 5
layer.shadowColor = UIColor.black.cgColor
layer.shadowOffset = CGSize(width: 0.0, height: 0.0)
layer.shadowOpacity = 0.2
layer.shadowRadius = 1.0
layer.masksToBounds = false
layer.shadowPath = UIBezierPath(roundedRect: bounds, cornerRadius: 5).cgPath
layer.contents = center
layer.shouldRasterize = true
layer.rasterizationScale = UIScreen.main.scale
}
}
在我的 iPhone X 上,一切都完美契合
但是当我使用屏幕较小的设备时,阴影无法根据按钮大小正确缩放。
按钮类本身有问题还是约束问题?我找不到解决办法。
【问题讨论】:
-
layer.shadowPath = UIBezierPath(roundedRect: bounds, cornerRadius: 5).cgPath。问题就在那里。当awakeFromNib()被调用时,bounds是来自 Xib 的那个。但是,在某个时间点之后,您的按钮会调整大小以适应屏幕(我猜)。所以bounds确实改变了,但layer.shadowPath没有改变。您可以覆盖var frame,并使用didSet{}再次将layer.shadowPath重置为正确的。
标签: swift button constraints scale shadow