当前位置:  开发笔记 > 编程语言 > 正文

在UITableView上仅为最后2个部分添加渐变背景

如何解决《在UITableView上仅为最后2个部分添加渐变背景》经验,为你挑选了1个好方法。

我正在创建一个UITableView有3个部分与自定义单元格.在第1部分,我将其设置为白色背景颜色.现在我想设置一个像下面图像的渐变背景,只有第2和第3部分(这个背景将从第2部分开始,到第3部分的最后一行结束):
渐变背景
我怎样才能做到这一点?有人可以给我一个解决方案吗?谢谢.



1> rob mayoff..:

这实际上非常简单.

演示

首先,确保每个单元格具有透明背景颜色.默认为不透明白色.你可以在故事板中设置它,或者你可以在你的tableView:cellForRowAtIndexPath:方法中这样做:

cell.backgroundColor = [UIColor clearColor];

接下来,创建一个子类UITableView并覆盖它layoutSubviews.一定要打电话[super layoutSubviews].

在你layoutSubviews的第一次调用的覆盖中,CAGradientLayer使用你选择的渐变创建一个并将其添加为索引0处的表视图层的子层(因此它位于所有表视图的其他子层之后).在每次调用时,将渐变图层的帧更新为[self rectForSection:1]和的并集[self rectForSection:2].

另外,请记住在故事板中设置表视图的自定义类.

这是我用来制作演示的表视图子类.

GradientTableView.h

#import 

@interface GradientTableView : UITableView

@end

GradientTableView.m

#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

推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有