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:
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
Ja, dies in LayoutSubviews behoben das Problem. Sie können dies als Antwort anbieten und ich werde es akzeptieren. – Kobe