当我尝试使用 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' 选项,虽然这也很好。
我正在尝试使用 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' 选项,虽然这也很好。