设置UIBezierPath掩码会更改UIView的宽度

时间:2016-06-15 22:29:00

标签: ios swift uiview uibutton uibezierpath

我有一个垂直的UIStackView,其中多个UIButton堆叠在一起。我希望视图的底部有圆角。

所以,我有这个:

enter image description here

每个彩色条都是UIButton,我希望底部(绿色按钮)有圆角。我尝试设置UIStackView的角半径,但在运行时记录错误,因为堆栈视图只是一个转换视图,因此转角半径设置无效。接下来,我尝试了一个我在SO上找到的解决方案:

extension UIView {

    /**
     Rounds the given set of corners to the specified radius

     - parameter corners: Corners to round
     - parameter radius:  Radius to round to
     */
    func round(corners: UIRectCorner, radius: CGFloat) {
        let path = UIBezierPath(roundedRect: bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius))
        let mask = CAShapeLayer()
        mask.path = path.CGPath
        self.layer.mask = mask
    }
}

然后我打电话给:

greenButton.round([.BottomLeft, .BottomRight], radius: 10.0)

哪个有效,就像圆角一样,但它改变了底部按钮的宽度。我猜它与应用蒙版重绘视图并且以某种方式混淆了堆栈的属性这一事实有关?

enter image description here

这就是我得到的。应填充带有红色箭头的空间。 UIStackView分布属性设置为Fill,我尝试在绿色按钮上设置宽度约束以始终将相等宽度与堆栈视图匹配,但仍然没有成功。

我被困了,任何帮助都会受到赞赏。感谢。

0 个答案:

没有答案