我有一个看起来像这样的函数:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
// instantiate the cell
if(indexPath.row >=4 && indexPath.row <=5)
{
[CustomTableCell addGradient];
}
}
基本上,只有第4行和第5行应该有渐变背景。当tableview首次加载时,只有行0到4的行是可见的,并且没有完美的渐变背景。当我向下滚动一下看第4行和第5行时,渐变出现在它们上面,这再次很棒。但当我向后滚动到第一行时,我突然看到第一行的渐变!但我从来没有要求第0行有梯度!另外,当我向下滚动一点时,我看到渐变应用于某些行而不是其他行。为什么会这样?
这是addGradient函数,因为它很有用:
- (void) addGradient
{
if([self.layer.sublayers count] >0)
{
if([[self.layer.sublayers objectAtIndex:0] isKindOfClass:[CAGradientLayer class]])
return;
}
CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = self.bounds;
gradient.colors = [NSArray arrayWithObjects:(id)[UIColor blueColor].CGColor, (id)[UIColor redColor].CGColor, nil];
[self.layer insertSublayer:gradient atIndex:0];
}
答案 0 :(得分:0)
我刚刚意识到iPhone / cocoa实际上正在重新使用内存中的现有单元格来获取cellForRowAtIndexpath以绘制出现在屏幕上的单元格。所以这就是为什么单元格仍然有我之前设置的渐变层。因此,我使用以下代码更新了我的stylecell函数以删除图层:
- (void) styleCell
{
if([self.layer.sublayers count] >0)
{
if([[self.layer.sublayers objectAtIndex:0] isKindOfClass:[CAGradientLayer class]])
{
[[self.layer.sublayers objectAtIndex:0] removeFromSuperlayer];
// return;
}
}
CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = self.bounds;
gradient.colors = [NSArray arrayWithObjects:(id)[UIColor blueColor].CGColor, (id)[UIColor redColor].CGColor, nil];
[self.layer insertSublayer:gradient atIndex:0];
}
@end