4

我正在使用下面的代码向我的表格单元格添加细微渐变效果。

    // 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 上不再工作,我该怎么做才能将渐变添加到我的表格单元格?

提前致谢。

4

4 回答 4

4

我通过将单元格背景颜色设置为清除来解决此问题。在这种情况下,您可以将索引保持为 0,以便显示元素,并显示渐变。

cell.backgroundColor = [UIColor clearcolor];
[cell.layer insertSublayer:gradientLayer atIndex:0];
于 2014-10-22T08:46:53.183 回答
3

根据我上面的评论,这对我来说有点模糊。似乎在 iOS6 上进行了几次测试后,我有 2 个子层,而对于 iOS7,我有 1 个子层。这与插入索引有关的事情超出了我的范围。我不明白为什么将渐变放置在索引 1 处是可行的……doh!:)

但是为了我的需要,我需要渐变出现在其他所有东西之上,所以我没有将上面的答案与操作系统检查一起使用(顺便说一句,效果很好!!),我做了类似的事情:

[self.layer insertSublayer:_gradientLayer above:[self.layer.sublayers firstObject]];
于 2013-09-23T15:50:18.067 回答
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];
    }
于 2013-09-16T02:18:21.020 回答
0

2016 年 4 月更新

所以我在遇到类似问题时偶然发现了这个问题。对我来说,以下奇迹般地成功了:

而不是使用gradient.colors = @[*colors*],我不得不使用gradient.colors = [NSArray arrayWithObjects: *colors*, nil]

可能是苹果的错误,或者我不明白的东西。希望这对任何人都有帮助!

于 2016-04-17T23:25:09.397 回答