Bezierpath按钮宽度问题

时间:2017-12-26 03:45:21

标签: ios uitableview uibutton uibezierpath cornerradius

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

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

任何帮助都会受到赞赏 谢谢

1 个答案:

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

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