Вопрос ширины кнопки Bezierpath
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)
}
Но здесь проблема в том, что он берет оригинальный кадр согласно заданному в viewcontroller раскадровки, а кнопка не принимает ширину согласно ограничениям.
Любая помощь будет оценена.
Спасибо
1 ответ
Возможно, проблема в том, что вы предполагаете, что 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
и кнопка будет округлять себя.