Uibezierpath按钮宽度问题

问题描述 投票:-1回答:1
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)
}

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

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

ios uitableview uibutton uibezierpath cornerradius
1个回答
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所需的值,按钮将自行循环。

© www.soinside.com 2019 - 2024. All rights reserved.