func roundCorners(_ corners: UIRectCorner, radius: CGFloat) {
let path = UIBezierPath(roundedRect: self.bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius))
let mask = CAShapeLayer()
mask.path = path.cgPath
self.layer.mask = mask
}
我正在使用此函数从UIButton
的特定边给出角半径。我将这个函数调用到UITableViewCell
但是我遇到的问题就像我给按钮约束了它的宽度正在根据设备的宽度变化而变化如果设备是iPhone 5那么其宽度是159.5相应的一半屏幕宽度。但它没有改变,按钮正在从宽度上切割。
我在TableviewCell
override func layoutSubviews() {
super.layoutSubviews()
self.btnWithdraw.roundCorners([.bottomRight], radius: 4.0)
self.btnAddFund.roundCorners([.bottomLeft], radius: 4.0)
}
但是这里的问题就像是在故事板视图控制器中按照给定的原始帧,按钮没有按照约束进行宽度。
任何帮助都会受到赞赏 谢谢
答案 0 :(得分:0)
也许问题是你假设在重新布置按钮的所有情况下都会在单元上调用layoutSubviews
。这可能不是真的。
为了避免这种假设,请按照以下几行在按钮本身中实现整个屏蔽:
class MyButton : UIButton {
var whatCorners : UIRectCorner = [.bottomRight]
var whatRadius : CGFloat = 4.0
func roundCorners(_ corners: UIRectCorner, radius: CGFloat) {
let path = UIBezierPath(roundedRect: self.bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius))
let mask = CAShapeLayer()
mask.path = path.cgPath
self.layer.mask = mask
}
override func layoutSubviews() {
super.layoutSubviews()
self.roundCorners(self.whatCorners, radius: self.whatRadius)
}
}
这样,您可以为每个按钮指定whatCorners
和whatRadius
所需的值,该按钮将自行循环。