当我尝试使用 UIBezierPath 圆角时,我的约束怎么会变得混乱?

How come my constraints get messed up when I try to round corners using UIBezierPath?

我正在尝试使用 UIBezierPath 对标签和按钮进行圆角处理。问题是,当我使用它时,它似乎忽略了告诉标签和按钮一直延伸到视图末尾的约束。我怎样才能得到约束来处理这个?这里有和没有 UIBezierPath 代码:

代码:

override func viewDidLoad() {
        super.viewDidLoad()

        let pathEULALabel = UIBezierPath(roundedRect:EULALabel.bounds, byRoundingCorners:[.TopLeft, .TopRight], cornerRadii: CGSizeMake(20, 20))
        let maskLayerEULALabel = CAShapeLayer()
        maskLayerEULALabel.path = pathEULALabel.CGPath
        EULALabel.layer.mask = maskLayerEULALabel

        let pathAcceptButton = UIBezierPath(roundedRect:acceptButton.bounds, byRoundingCorners:[.BottomLeft, .BottomRight], cornerRadii: CGSizeMake(20, 20))
        let maskLayerAcceptButton = CAShapeLayer()
        maskLayerAcceptButton.path = pathAcceptButton.CGPath
        acceptButton.layer.mask = maskLayerAcceptButton
    }

我猜你的视图框架在调用 viewDidLoad 后发生了变化。您看到的圆角视图的大小可能是故事板中视图的宽度。

尝试将您的代码放在 viewDidLayoutSubviews 中。这似乎更适合放置代码。

或者,您可以考虑制作一个@IBDesignable UIView 扩展,它可以让您直接从故事板绕过任何视图的角落。那是 'nice/best' 选项,虽然这也很好。