问题
今天的开发中存在这个问题,在一个自定义的 collectionViewCell
中添加了另一个布满整个 cell
的子 view
,这个子 view
的通过 Snapkit
来布局, 子 view
的内部界面,如 iamgeview
label
等也通过 它来布局。但这个时候有个异类出来了,设计要求这个子view
必须带一个渐变的蒙层,我要加这个渐变的蒙层,必须知道 frame 之后才能正确的添加这个layer,目前我没有找到好的方法来处理这种情况,只能在这里先给它赋值,如下:
override func updateConstraints() {
super.updateConstraints()
// TODO
// 当父 view 约束改变的时候,应能可以从子 view
// 拿到对应的约束 和 frame。从理论上来说,如果子 view 有需要拿到它的frame才能做得事情,
// 一定能够直接从对应的继承的方法里在合适的时机获取 frame,然后执行那个方法。
// 这里的情况就是如此, containView 需要添加一个渐变的 layer,
// 必须知道 frame 之后才能正确的添加这个layer,目前我没有找到好的方法
// 来处理这种情况,只能在这里先给它赋值,然后再通过调用更新的方法去在这个
// 类中重写 UIView 的 系统方法 updateConstraints, 在此方法中添加渐变的 layer
containView.frame = self.bounds
containView.setNeedsUpdateConstraints()
}
再通过调用更新的方法去在这个类中 containView
重写 UIView 的 系统方法 updateConstraints, 在此方法中添加渐变的 layer,如下:
override func updateConstraints() {
super.updateConstraints()
addGradientLayer()
}