2016-07-09 8 views
0

Ich versuche, Ecken von meinem Etikett und Knopf mit UIBezierPath zu runden. Das Problem ist, dass, wenn ich es verwende, es scheint, meine Beschränkungen zu ignorieren, die dem Etikett und dem Knopf sagen, den ganzen Weg bis zum Ende der Ansicht zu verlängern. Wie kann ich mit den Einschränkungen arbeiten? Hier ist mit und ohne UIBezierPath Code:Wie kommt es, dass meine Einschränkungen durcheinander kommen, wenn ich versuche, Ecken mit UIBezierPath abzurunden?

With

Without

Code:

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 
    } 

Antwort

1

Ich vermute, den Rahmen Ihrer Ansicht, die Änderungen nach viewDidLoad aufgerufen wird. Die Größe Ihrer abgerundeten Eckenansichten, die Sie sehen, ist wahrscheinlich die Breite Ihrer Ansicht in Ihrem Storyboard.

Versuchen Sie stattdessen, Ihren Code in viewDidLayoutSubviews zu setzen. Dies scheint ein geeigneterer Ort für den Code zu sein.

Alternativ können Sie eine @IBDesignable UIView-Erweiterung erstellen, mit der Sie die Ecken einer beliebigen Ansicht direkt von Ihrem Storyboard aus umrunden können. Das ist die "schön/beste" Option, obwohl das auch in Ordnung ist.

+0

Ich legte den Code in ViewDidLayoutSubviews und es funktionierte wie ein Charme. Vielen Dank! –