我的主视图有一个子视图,我使用以下扩展名添加了一个掩码:
extension UIView{
func addTopRoundCorners(){
let bezierPath = UIBezierPath(roundedRect: self.bounds, byRoundingCorners: [UIRectCorner.topLeft, UIRectCorner.topRight], cornerRadii: CGSize(width: 20, height: 20))
let maskLayer = CAShapeLayer()
maskLayer.path = bezierPath.cgPath
maskLayer.fillColor = UIColor.red.cgColor
self.layer.mask = maskLayer
}
}
我注意到,如果我在主视图上调用layoutIfNeeded()
之前,此代码对我的子视图的影响只会显示在屏幕上,然后再将掩码添加到我的子视图中。如果有人能向我解释为什么会这样,我真的很感激?
答案 0 :(得分:0)
layoutIfNeeded
将计算视图的位置和大小。如果您在计算最终位置和尺寸之前调用addTopRoundCorners()
函数,那么用于创建self.bounds
的{{1}}将会出错。
自动布局不会自动调整遮罩层的大小,也不会调用UIBezierPath
来重新创建路径。