UICollectionView 单元格阴影

Posted

技术标签:

【中文标题】UICollectionView 单元格阴影【英文标题】:UICollectionView Cell Shadow 【发布时间】:2017-01-05 14:58:29 【问题描述】:

我正在尝试为我的自定义 UICollectionViewCell 添加阴影,这是我在自定义集合视图单元格类中使用的代码:

self.layer.shadowOffset = CGSizeMake(1, 0);
self.layer.shadowColor = [[UIColor blackColor] CGColor];
self.layer.shadowRadius = 5;
self.layer.shadowOpacity = .25;

这会给集合视图单元格的组件带来阴影。

【问题讨论】:

你能解释一下self在这种情况下是什么吗? self 是自定义的 uicollectionview 单元类 尝试将阴影添加到单元格的contentView 请检查您的 Cell 顶部是否有 UIView。在这种情况下,您需要对其进行屏蔽。 Shadow not showing when background color is clear color的可能重复 【参考方案1】:

不要忘记添加这两行

self.clipsToBounds = false      
self.layer.masksToBounds = false

【讨论】:

太棒了,花了好几个小时寻找解决方法!谢谢!)【参考方案2】:

Swift 4.2 和 xcode 10

这是添加阴影的代码。

    cell.contentView.layer.cornerRadius = 2.0
    cell.contentView.layer.borderWidth = 1.0
    cell.contentView.layer.borderColor = UIColor.clear.cgColor
    cell.contentView.layer.masksToBounds = true

    cell.layer.backgroundColor = UIColor.white.cgColor
    cell.layer.shadowColor = UIColor.gray.cgColor
    cell.layer.shadowOffset = CGSize(width: 0, height: 2.0)//CGSizeMake(0, 2.0);
    cell.layer.shadowRadius = 2.0
    cell.layer.shadowOpacity = 1.0
    cell.layer.masksToBounds = false
    cell.layer.shadowPath = UIBezierPath(roundedRect:cell.bounds, cornerRadius:cell.contentView.layer.cornerRadius).cgPath

【讨论】:

【参考方案3】:

cell.layer.backgroundColor 不应该是清晰的颜色

试试

cell.layer.backgroundColor = UIColor.white.cgColor

【讨论】:

【参考方案4】:

转到 CustomCollectionViewCell.m 文件 为我工作。希望对你有帮助...

- (id)initWithFrame:(CGRect)frame

    self = [super initWithFrame:frame];
    if (self) 
        //////// make shadow  of total view
        self.clipsToBounds = NO;
        self.layer.masksToBounds = NO;
        self.layer.shadowRadius = 5;
        self.layer.shadowOpacity = 0.5;
        self.layer.shadowColor = [UIColor blackColor].CGColor;
        self.layer.shadowOffset = CGSizeMake(0, 1);
        self.layer.shadowPath = [UIBezierPath bezierPathWithRect:self.bounds].CGPath;

        // make radius of the cell
        self.layer.cornerRadius = 5;

    
    return self;

【讨论】:

以上是关于UICollectionView 单元格阴影的主要内容,如果未能解决你的问题,请参考以下文章

将 SKProduct 价格提取到 UICollectionView 单元格标签中

UICollectionView 水平分页仅在第一页上每行显示 3 个单元格

在 UICollectionView/UITableView 中为滚动视图的偏移设置动画会导致单元格过早消失

如何使用清晰的背景颜色向 UICollectionViewCell 添加阴影?

UICollectionView,按钮未出现

iOS中的单元格上未显示阴影