我正在使用下面的代码向我的表格单元格添加一个渐变渐变效果。
// add a layer that overlays the cell adding a subtle gradient effect
CAGradientLayer* gradientLayer = [CAGradientLayer layer];
NSLog(@"%@",NSStringFromCGRect(cell.bounds));
gradientLayer.frame = cell.bounds;
gradientLayer.colors = @[(id)[[UIColor colorWithWhite:1.0f alpha:0.2f] CGColor],
(id)[[UIColor colorWithWhite:1.0f alpha:0.1f] CGColor],
(id)[[UIColor clearColor] CGColor],
(id)[[UIColor colorWithWhite:0.0f alpha:0.1f] CGColor]];
gradientLayer.locations = @[@0.00f, @0.01f, @0.95f, @1.00f];
[cell.layer insertSublayer:gradientLayer atIndex:0];
代码运行后,我可以看到CAGradientLayer已添加到我的cell.layer中。但是当我在iOS 7模拟器上运行应用程序时,我根本看不到它。
<CALayer:0xaca1980; sublayers = (<CAGradientLayer: 0xaad2110>, <CALayer: 0xaca2a70>);
该代码适用于iOS 6,没有任何问题。
如果CAGradientLayer不再适用于iOS 7,我该怎么办才能将渐变添加到我的表格单元格中?
提前致谢。
答案 0 :(得分:4)
我通过将单元格背景颜色设置为清除来修复此问题。 在这种情况下,您可以将索引保持为0,因此显示元素,并且也显示渐变。
cell.backgroundColor = [UIColor clearcolor];
[cell.layer insertSublayer:gradientLayer atIndex:0];
答案 1 :(得分:3)
根据我上面的评论,对我来说这有点模糊。似乎在iOS6上进行了一些测试之后我有2个子层,对于iOS7,我有1.这与索引的插入有什么关系超出了我。我不明白为什么在索引1处放置渐变有效... doh! :)
但是根据我的需要,我要求渐变显示在其他所有内容之上,所以不要使用上面的操作系统检查(这完全没用BTW !!),我做了类似的事情:
[self.layer insertSublayer:_gradientLayer above:[self.layer.sublayers firstObject]];
答案 2 :(得分:2)
我已通过更改
解决了此问题[cell.layer insertSublayer:gradientLayer atIndex:0];
到
[cell.layer insertSublayer:gradientLayer atIndex:1];
为了向后兼容。我正在使用像这样的代码
if ([Common isiOS7]) {
[self.layer insertSublayer:_gradientLayer atIndex:1];
}
else {
[self.layer insertSublayer:_gradientLayer atIndex:0];
}
答案 3 :(得分:0)
更新 2016年4月
所以当我遇到类似的问题时,我偶然发现了这个问题。对我来说,以下奇迹般的伎俩:
而不是使用gradient.colors = @[*colors*]
,
我不得不使用gradient.colors = [NSArray arrayWithObjects: *colors*, nil]
可能是苹果虫,或者我不明白的东西。希望这有助于任何人!