Uibezierpath按钮宽度问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Uibezierpath按钮宽度问题相关的知识,希望对你有一定的参考价值。

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)
}

但是这里的问题就像是在故事板视图控制器中按照给定的原始帧,并且按钮没有按照约束获取宽度。

任何帮助将不胜感激。 谢谢

答案

也许问题是你假设在重新布置按钮的所有情况下都会在单元格上调用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)
    }
}

这样,您可以为每个按钮指定whatCornerswhatRadius所需的值,按钮将自行循环。

以上是关于Uibezierpath按钮宽度问题的主要内容,如果未能解决你的问题,请参考以下文章

Bezierpath 按钮宽度问题

我将如何在按钮单击时从 uiview 中删除 UIBezierPath。?

如何在 Swift 中未知宽度和高度的视图中居中 UIBezierPath 椭圆?

UIBezierPath:byRoundingCorners:不起作用

多个 UIView 的动画与 UIBezierPath

如何使 UIBezierPath 从中心填充