Вопрос ширины кнопки 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 и кнопка будет округлять себя.

Другие вопросы по тегам