【问题标题】:iPhone UITableViewCell layer shadowiPhone UITableViewCell 图层阴影
【发布时间】:2011-04-02 14:11:36
【问题描述】:

我正在尝试使用 layer.shadowColor、Offset、Radius 向 UITableViewCell 添加阴影,但它似乎不会以任何方式影响它。该表是分组样式。任何想法为什么?

这是我正在使用的代码:

cell.layer.shadowColor= [UIColor blackColor].CGColor;
cell.layer.shadowRadius = 5.0;
cell.layer.shadowOffset = CGSizeMake(10, 10);

【问题讨论】:

    标签: iphone cocoa-touch uitableview shadow


    【解决方案1】:

    您还需要设置阴影不透明度,它默认为 0,如果您不明确设置,您将看不到任何内容。

    CALayer Reference

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

    另外请注意,如果您不设置阴影路径,您在 iPhone/iPad 上的性能会很差。使用类似下面的代码来设置阴影路径,它消除了对 tableviewcell 下方的图层进行模糊以创建“高质量”阴影的需要。

    CGRect shadowFrame = cell.layer.bounds;
    CGPathRef shadowPath = [UIBezierPath bezierPathWithRect:shadowFrame].CGPath;
    cell.layer.shadowPath = shadowPath;
    

    观看视频 425(也称为 424 和 426),了解更多关于 WWDC 2010 阴影的信息:WWDC 2010 Session Videos

    【讨论】:

    • 这个对我来说非常有效,而不是像许多其他解决方案所建议的那样添加一个额外的单元格。此外,如果您的单元格被重复使用,您需要取消设置它,因为我只希望表格中的最后一个单元格使用它。
    • 性能提示是一个巨大的帮助 - 没有 shadowPath 表格单元格在滑动时非常不稳定。设置 shadowPath 有点不明显,并没有真正出现在我能找到的任何文档中。
    • 如果我在滚动表格视图的边界时将阴影放在表格视图上,而不是单元格上。如何更新 shadowPath 以匹配?
    • 很好的答案。我觉得这非常令人印象深刻
    • 当您的单元格列表很长时,这不起作用!当我向下滚动然后再次向上滚动时,单元格会更改它们在 viewHierarchy 中的位置。新出列的单元格不会添加到顶部,这意味着这些单元格隐藏了其上方单元格的阴影效果。有什么建议吗?
    【解决方案2】:

    只需在 Swift 中添加@Paul Soult 答案:

    cell?.layer.shadowOffset = CGSizeMake(0, 1)
    cell?.layer.shadowColor = UIColor.blackColor().CGColor
    cell?.layer.shadowRadius = 1
    cell?.layer.shadowOpacity = 0.6
    
    // Maybe just me, but I had to add it to work:
    cell?.clipsToBounds = false
    
    let shadowFrame: CGRect = (cell?.layer.bounds)!
    let shadowPath: CGPathRef = UIBezierPath(rect: shadowFrame).CGPath
    cell?.layer.shadowPath = shadowPath
    

    【讨论】:

      【解决方案3】:

      分组表视图单元格的视图层次结构确实相当不透明。 cell.layer 实际上是指单元格主视图的层,它占据了表格的整个宽度。插入单元格的圆形部分实际上由苹果用于绘制分组单元格的私有方法处理。

      创建 UITableViewCell 的自定义子类可能会更幸运。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-11-06
        • 2021-10-07
        • 2016-10-05
        • 2012-03-03
        • 1970-01-01
        • 1970-01-01
        • 2015-09-11
        • 2014-04-21
        相关资源
        最近更新 更多