2016-07-02 4 views
1

I verlängert UIView eine Runde() Methode hinzuzufügen Eckradius an spezifischen Ecken anzuwenden:Anwenden Eckradius an Oberteil des UIView verwendet Autolayout

extension UIView { 
    func round(corners: UIRectCorner, radius: CGFloat) -> CAShapeLayer { 
     let path = UIBezierPath(roundedRect: bounds, byRoundingCorners: corners, cornerRadii: CGSizeMake(radius, radius)) 
     let mask = CAShapeLayer() 
     mask.path = path.CGPath 
     self.layer.mask = mask 

     return mask 
    } 
} 

in einer Ansicht Controller habe ich folgende Hierarchie:

  • StackView
    • UIView

Constraint sind sowohl für Top-Set, das führende, Hinter als 0
Mein Problem ist, wenn ich (nur) 5,5-Zoll-Bildschirm ausführen, wird die UIView nicht den ganzen Weg gespannt, wie es sein sollte, wenn ich die Anwendung Eckenradius dazu:

override func viewDidLayoutSubviews() { 
    self.greenview.round([.TopLeft, .TopRight], radius: CGFloat(10)) 
} 

Wenn ich diese Zeile entferne, funktioniert es richtig. Rufe ich diese Methode nicht an der richtigen Stelle an?

ist hier ein Screenshot des Problems:

enter image description here

+0

Erschossen im Dunkeln, könnte es sein, weil Sie die Elternimplementierung von 'viewDidLayoutSubviews' nicht aufrufen? Außerdem denke ich, dass 'layoutSubviews' ein besserer Ort für so etwas wäre. – SArnab

+0

Ja, dies in LayoutSubviews behoben das Problem. Sie können dies als Antwort anbieten und ich werde es akzeptieren. – Kobe

Antwort

2

Versuchen Sie es in 'layoutSubviews' setzen nach der Super-Methode aufrufen. Es ist besser für bounds-abhängige UI-Änderungen geeignet.

Verwandte Themen