UITableViewCell 中的渐变出现在内容上

Posted

技术标签:

【中文标题】UITableViewCell 中的渐变出现在内容上【英文标题】:Gradient in UITableViewCell Appearing Over Content 【发布时间】:2014-07-28 21:17:36 【问题描述】:

我正在尝试向自定义单元格的背景添加渐变,当我使用 addSublayer 显示渐变时,它会显示在其余内容上,而当我使用 insertSublayer: atIndex: 0 时,它不会出现。这个单元格是自定义单元格,我该怎么办?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:        (NSIndexPath *)indexPath

    static NSString *CellIdentifier = @"ScoreCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
    CAGradientLayer *gradient = [CAGradientLayer layer];
    gradient.frame = cell.bounds;
    gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor yellowColor]CGColor], (id)[[UIColor whiteColor]CGColor], nil];
    [cell.layer insertSublayer:gradient atIndex:1];
    return cell;

【问题讨论】:

创建一个子类,并在初始化时将渐变添加到backgroundView的层。请熟悉表格视图。重复使用表格视图单元格。 如果在索引 0 处插入不起作用,您尝试 1 吗?? 我知道它们被重复使用,这是我正在尝试做的简化版本。我希望这个渐变只应用于一个单元格,其他的会有所不同。 【参考方案1】:

插入以下代码。请记住,子层是从后到前列出的:

cell.backgroundColor = [UIColor clearColor];
[cell.layer insertSublayer:gradient atIndex:0];

【讨论】:

【参考方案2】:

UITableViewCell 的默认背景颜色为白色。将其设置为清除,您应该能够在索引 0 处插入渐变并显示它。

【讨论】:

坏主意,性能方面。最好将渐变放置在图层层次结构中的正确位置。 如果我不应该说清楚,并且 atIndex:0 显示在所有文本之上并且没有出现 1,我该怎么办? UIView *tableBackgroundView = [[UIView alloc] init]; [tableBackgroundView.layer insertSublayer:gradientLayer atIndex:0]; [self.tableView setBackgroundView:tableBackgroundView]; 使用这个有什么好处吗?

以上是关于UITableViewCell 中的渐变出现在内容上的主要内容,如果未能解决你的问题,请参考以下文章

滚动后 UITableViewCell 内的 UIView 中的渐变发生了变化

UITableviewCell 中的渐变添加导致重新加载时出现动画问题

在 UITableViewCell 的背景图像上添加渐变

在 UITableViewCell 中添加渐变隐藏 UILabel 文本

Swift交替UITableViewCell渐变颜色

UITableViewCell 中的 CAGradientLayer