只有左上角是圆形而不是topLeft和bottomLeft

时间:2017-04-29 21:36:59

标签: ios swift uiview uibezierpath

我试图让UIView topLeft和bottomLeft四舍五入,但由于某种原因,只有topLeft有边框半径。是什么导致这种情况?

这就是我在做什么:

我有扩展名:

extension UIView {
    func roundCorners(_ corners: UIRectCorner, radius: CGFloat) {
        let path = UIBezierPath(roundedRect: self.bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius))
        let mask = CAShapeLayer()
        mask.path = path.cgPath
        self.layer.mask = mask
    }
}

我将它应用于这样的视图:

myView.roundCorners([.topLeft, .bottomLeft], radius: 10.0)

我在单元格中使用它,我也在使用自动布局。

目前它看起来像这样(绿色是我正在谈论的视图)但我希望bottomLeft也有角半径:

enter image description here

1 个答案:

答案 0 :(得分:0)

问题在于你的时间安排。您的扩展程序依赖于self.bounds。但是,如果您过早地调用此扩展程序(例如viewDidLoad),那些bounds尚未确定。您的视图按自动布局调整大小;这意味着在您的视图layoutSubviews或视图控制器的viewDidLayoutSubviews被调用之前,您没有界限。