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 中的渐变添加导致重新加载时出现动画问题