美文网首页
iOS TableViewCell圆角加阴影,阴影重叠,阴影超出

iOS TableViewCell圆角加阴影,阴影重叠,阴影超出

作者: BabyNeedCare | 来源:发表于2021-12-03 11:51 被阅读0次

如图,圈住的地方是带有圆角的内容背景,要给它加阴影。

wecom-temp-ee8039fa2909c4a0f1454164482e8ffe.png
//分类方法:
-(CALayer *)setShadowLayerWithRadius:(CGFloat)radius{
    CALayer *subLayer = [CALayer layer];
    subLayer.frame = CGRectMake(self.frame.origin.x+.1, self.frame.origin.y+.1, self.frame.size.width-.2, self.frame.size.height-.2);
    subLayer.cornerRadius=radius;
    subLayer.backgroundColor=[[UIColor blackColor] colorWithAlphaComponent:0.2].CGColor;
    subLayer.masksToBounds=NO;
    subLayer.shadowColor = [UIColor blackColor].CGColor;//shadowColor阴影颜色
    subLayer.shadowOffset = CGSizeMake(-1.5, 1.5);//shadowOffset阴影偏移,x向右偏移3,y向下偏移2,默认(0, -3),这个跟shadowRadius配合使用
    subLayer.shadowOpacity = 0.3;//阴影透明度,默认0
    subLayer.shadowRadius = radius;//阴影半径,默认10
    
    [[self superview].layer insertSublayer:subLayer below:self.layer];
    
    return subLayer;
}

用上述代码方法即可,但是这种方式在列表就会异常。
Q:
1.阴影可能超出或者显示不全
2.滑动过程中,阴影越来越黑。

A:
Q1是因为以当前view的frame来创建CALayer,如果中间变更frame, CALayer的frame就会沿用旧的view的frame, 导致问题出现。
Q2是在Q1的基础上,复用了Cell,CALayer不断叠加

因此,必须在TableviewCell复用过程中移除CALayer, 在新的frame下,重新生成CALayer的阴影。

-(void)setModel:(XXXModel *)model{
    self.bgViewHeightConstraint.constant = 220 - (isABC ? 0 : 40);
    self.BGView.frame = CGRectMake(self.BGView.x, self.BGView.y, self.BGView.width, self.bgViewHeightConstraint.constant);
    [self.BGView setShadowLayerWithRadius:10];
}

- (void)prepareForReuse {
    [super prepareForReuse];    
    for (CALayer *layer in self.BGView.layer.sublayers) { if ([layer isKindOfClass: 
    [CALayer class]]) {[layer removeFromSuperlayer];break;}}
}

至此,就不会再出现Q1,Q2的问题了

相关文章

网友评论

      本文标题:iOS TableViewCell圆角加阴影,阴影重叠,阴影超出

      本文链接:https://www.haomeiwen.com/subject/bxbpxrtx.html