滚动后,单元格正在丢失gradientLayer

时间:2014-03-25 20:30:17

标签: ios objective-c uitableview gradient

在我的UITableview中,我创建了一个渐变图层并将其应用于单个单元格。

CAGradientLayer *gradient = [CAGradientLayer layer];
CGRect gradframe = CGRectMake(cell.frame.origin.x, cell.frame.origin.y, self.view.frame.size.width, cell.frame.size.height);
gradient.frame = gradframe;
gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor colorWithRed:.9 green:.9 blue:.9 alpha:1.0] CGColor], (id)[[UIColor colorWithRed:.8 green:.8 blue:.8 alpha:1.0] CGColor], nil];

[cell setBackgroundView:[[UIView alloc] init]];
[cell.backgroundView.layer insertSublayer:gradient atIndex:0] ;

当我滚动屏幕并向后滚动查看单元格时,它们会丢失渐变图层。

我仍然对ios开发有点新意,我们将不胜感激。

编辑:这有时只会发生。当偶尔向上和向下滚动时,将会有一个具有该层的单元格。甚至这些细胞也不一致。

1 个答案:

答案 0 :(得分:1)

尝试使用cell.bounds代替cell.frame,因为渐变框架应该相对于单元格。 NSLog如下所示的渐变框架,并验证原点是{0,0}。

NSLog( @"%@", NSStringFromCGRect( gradient.frame ) );

另外,请注意,每次从重用队列中拉出一个单元格时,它仍将被配置为进入重用队列时。因此,您需要确保不向已具有渐变的单元格添加渐变,否则可能会遇到内存问题。


我认为这是你想要的gradframe

CGRect gradframe = CGRectMake(0, 0, self.view.frame.size.width, cell.frame.size.height);