【问题标题】:Cell is losing gradientLayer after scrolling滚动后单元格正在丢失渐变层
【发布时间】:2014-03-25 20:30:16
【问题描述】:

在我的 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 开发还是有点陌生​​,如果有任何帮助,我们将不胜感激。

编辑:这只会偶尔发生。偶尔上下滚动时,会有一个包含该图层的单元格。甚至这些单元格也不一致。

【问题讨论】:

  • 我猜你的问题出在 cellForRowAtindexPath 中的其他地方。显示更多代码。
  • 嗨,你解决了吗?

标签: ios objective-c uitableview gradient


【解决方案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);

【讨论】:

  • 是的!使用 cell.frame 允许渐变保留。我在上面使用 gradframe 的原因是为了扩展彩色纹理,因为 ipad 上的 cell.bounds.size.width 停止了,为单元格的其余部分留下了空白。有什么办法解决这个问题?
  • @user3009729 好的,我不完全明白你在用gradframe 做什么。我在回答中添加了一个建议。
猜你喜欢
  • 2015-07-17
  • 2011-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多