使用AutoLayout将圆角应用于UIView的顶部部分

3

我扩展了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
    }
}

在一个视图控制器中我有以下层次结构:

  • StackView
    • UIView

上下左右的约束都设置为0。
我的问题是当我只使用5.5英寸的屏幕时,应用圆角后UIView没有完全延伸到应该达到的位置:

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

如果我删除这行代码,它就可以正常工作。难道我没有在正确的位置调用该方法吗?
以下是问题的屏幕截图: enter image description here

猜一个可能原因是你没有调用viewDidLayoutSubviews的父类实现。另外,我认为在layoutSubviews方法中处理这样的事情可能更合适。 - SArnab
没错,在layoutSubviews中做这个修复了问题。你可以把这个作为答案提供,我会接受它。 - Adrian
1个回答

4
尝试在调用 super 方法后将其放在“layoutSubviews”中。这更适合于依赖界限的UI更改。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接