Ios 使用自动布局将角半径应用于UIView的顶部

Ios 使用自动布局将角半径应用于UIView的顶部,ios,swift,autolayout,Ios,Swift,Autolayout,我扩展了UIView,添加了一个round()方法,将拐角半径应用于特定拐角: extension UIView { func round(corners: UIRectCorner, radius: CGFloat) -> CAShapeLayer { let path = UIBezierPath(roundedRect: bounds, byRoundingCorners: corners, cornerRadii: CGSizeMake(radius, ra

我扩展了
UIView
,添加了一个round()方法,将拐角半径应用于特定拐角:

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
    }
}
在一个视图控制器中,我具有以下层次结构:

  • 斯塔克维尤
    • UIView
顶部、前导和尾随的约束均设置为0。
我的问题是,当我运行(仅)5.5英寸屏幕时,UIView不会像我应用角半径时那样一直拉伸:

override func viewDidLayoutSubviews() {
    self.greenview.round([.TopLeft, .TopRight], radius: CGFloat(10))
}
如果我拆下这条线,它会正常工作。我调用此方法的位置不对吗

以下是问题的屏幕截图:


调用super方法后,尝试将其放入“layoutSubviews”中。它更适合于依赖边界的UI更改

在黑暗中拍摄,可能是因为您没有调用
viewdilayoutsubviews
的父实现吗?此外,我认为
layoutSubviews
将是这样做的更好地方。是的,在layoutSubviews中这样做修复了问题。你可以提供这个答案,我会接受的。