我正在创建一个UITableView有3个部分与自定义单元格.在第1部分,我将其设置为白色背景颜色.现在我想设置一个像下面图像的渐变背景,只有第2和第3部分(这个背景将从第2部分开始,到第3部分的最后一行结束):
我怎样才能做到这一点?有人可以给我一个解决方案吗?谢谢.
这实际上非常简单.
首先,确保每个单元格具有透明背景颜色.默认为不透明白色.你可以在故事板中设置它,或者你可以在你的tableView:cellForRowAtIndexPath:
方法中这样做:
cell.backgroundColor = [UIColor clearColor];
接下来,创建一个子类UITableView
并覆盖它layoutSubviews
.一定要打电话[super layoutSubviews]
.
在你layoutSubviews
的第一次调用的覆盖中,CAGradientLayer
使用你选择的渐变创建一个并将其添加为索引0处的表视图层的子层(因此它位于所有表视图的其他子层之后).在每次调用时,将渐变图层的帧更新为[self rectForSection:1]
和的并集[self rectForSection:2]
.
另外,请记住在故事板中设置表视图的自定义类.
这是我用来制作演示的表视图子类.
#import@interface GradientTableView : UITableView @end
#import "GradientTableView.h" @implementation GradientTableView { CAGradientLayer *gradientLayer; } - (void)layoutSubviews { [super layoutSubviews]; [self layoutGradient]; } - (void)layoutGradient { [self createGradientLayerIfNeeded]; [self updateGradientLayerFrame]; } - (void)createGradientLayerIfNeeded { if (gradientLayer != nil) { return; } gradientLayer = [CAGradientLayer layer]; gradientLayer.colors = @[ (__bridge id)[UIColor redColor].CGColor, (__bridge id)[UIColor orangeColor].CGColor ]; gradientLayer.locations = @[ @0, @1 ]; gradientLayer.startPoint = CGPointZero; gradientLayer.endPoint = CGPointMake(0, 1); gradientLayer.type = kCAGradientLayerAxial; [self.layer insertSublayer:gradientLayer atIndex:0]; } - (void)updateGradientLayerFrame { CGRect frame = [self rectForSection:1]; frame = CGRectUnion(frame, [self rectForSection:2]); gradientLayer.frame = frame; } @end