iOS开发 - UITableView 卡片效果,同时给UITableView的header,footer, row 添加阴影

项目中有卡片效果显示的样式,即一个表格呈卡片状,有阴影及边框。

  • 思路:将 UITableView 的每个 section 统一设置成卡片效果,即同时给 UITableView 的 header,footer, cell 添加阴影及边框。进一步说,就是给 tableViewHeader 的左上右部分添加 view,给 tableViewFooter 的左下右部分添加 view,给 cell 的左右部分添加 view,最后给这些 view 全部添加渐变色。
  • 效果图
卡片效果图
  • 核心代码:

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, headerViewHeight)];
    view.backgroundColor = [UIColor whiteColor];
    UIView *leftView = [[UIView alloc] initWithFrame:CGRectMake(2, 4, 6, headerViewHeight-4)];
    [view addSubview:leftView];
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, headerViewHeight)];
    label.text = [NSString stringWithFormat:@"       组头%ld", section+1];
    [view addSubview:label];
    CAGradientLayer *gradient = [CAGradientLayer layer];
    gradient.frame = leftView.bounds;
    gradient.colors = [NSArray arrayWithObjects:
                       (id)[UIColor colorWithRed:(0/255.0)  green:(0/255.0)  blue:(0/255.0)  alpha:0.0].CGColor,
                       (id)[UIColor colorWithRed:(0/255.0)  green:(0/255.0)  blue:(0/255.0)  alpha:0.12].CGColor, nil];
    gradient.startPoint = CGPointMake(0, 0);
    gradient.endPoint = CGPointMake(1, 0);
    [leftView.layer addSublayer:gradient];
    
    UIView *rightView = [[UIView alloc] initWithFrame:CGRectMake(kScreenWidth - 8, 4, 6, headerViewHeight-4)];
    [view addSubview:rightView];
    CAGradientLayer *gradientR = [CAGradientLayer layer];
    gradientR.frame = rightView.bounds;
    gradientR.colors = [NSArray arrayWithObjects:
                        (id)[UIColor colorWithRed:(0/255.0)  green:(0/255.0)  blue:(0/255.0)  alpha:0.12].CGColor,
                        (id)[UIColor colorWithRed:(0/255.0)  green:(0/255.0)  blue:(0/255.0)  alpha:0.0].CGColor, nil];
    gradientR.startPoint = CGPointMake(0, 0);
    gradientR.endPoint = CGPointMake(1, 0);
    [rightView.layer addSublayer:gradientR];
    
    UIView *topV = [[UIView alloc] initWithFrame:CGRectMake(6, 2, kScreenWidth - 12, 2)];
    [view addSubview:topV];
    CAGradientLayer *gradientT = [CAGradientLayer layer];
    gradientT.frame = topV.bounds;
    gradientT.colors = [NSArray arrayWithObjects:
                        (id)[UIColor colorWithRed:(0/255.0)  green:(0/255.0)  blue:(0/255.0)  alpha:0.12].CGColor,
                        (id)[UIColor colorWithRed:(0/255.0)  green:(0/255.0)  blue:(0/255.0)  alpha:0.0].CGColor, nil];
    gradientT.startPoint = CGPointMake(0, 1);
    gradientT.endPoint = CGPointMake(0, 0);
    [topV.layer addSublayer:gradientT];
    return view;
}

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, footerViewHeight)];
    view.backgroundColor = [UIColor whiteColor];
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, footerViewHeight)];
    label.text = [NSString stringWithFormat:@"       组尾%ld", section+1];
    [view addSubview:label];
    UIView *leftView = [[UIView alloc] initWithFrame:CGRectMake(2, 0, 6, footerViewHeight-4)];
    [view addSubview:leftView];
    CAGradientLayer *gradient = [CAGradientLayer layer];
    gradient.frame = leftView.bounds;
    gradient.colors = [NSArray arrayWithObjects:
                       (id)[UIColor colorWithRed:(0/255.0)  green:(0/255.0)  blue:(0/255.0)  alpha:0.12].CGColor,
                       (id)[UIColor colorWithRed:(0/255.0)  green:(0/255.0)  blue:(0/255.0)  alpha:0.0].CGColor, nil];
    gradient.startPoint = CGPointMake(1, 0);
    gradient.endPoint = CGPointMake(0, 0);
    [leftView.layer addSublayer:gradient];
    
    UIView *rightView = [[UIView alloc] initWithFrame:CGRectMake(kScreenWidth - 8, 0, 6, footerViewHeight-4)];
    [view addSubview:rightView];
    CAGradientLayer *gradientR = [CAGradientLayer layer];
    gradientR.frame = rightView.bounds;
    gradientR.colors = [NSArray arrayWithObjects:
                        (id)[UIColor colorWithRed:(0/255.0)  green:(0/255.0) blue:(0/255.0)  alpha:0.12].CGColor,
                        (id)[UIColor colorWithRed:(0/255.0)  green:(0/255.0)  blue:(0/255.0)  alpha:0.0].CGColor, nil];
    gradientR.startPoint = CGPointMake(0, 0);
    gradientR.endPoint = CGPointMake(1, 0);
    [rightView.layer addSublayer:gradientR];
    
    UIView *bottomV = [[UIView alloc] initWithFrame:CGRectMake(6, footerViewHeight-4, kScreenWidth - 12, 2)];
    [view addSubview:bottomV];
    CAGradientLayer *gradientB = [CAGradientLayer layer];
    gradientB.frame = bottomV.bounds;
    gradientB.colors = [NSArray arrayWithObjects:
                        (id)[UIColor colorWithRed:(0/255.0)  green:(0/255.0) blue:(0/255.0)  alpha:0.12].CGColor,
                        (id)[UIColor colorWithRed:(0/255.0)  green:(0/255.0) blue:(0/255.0)  alpha:0.0].CGColor, nil];
    gradientB.startPoint = CGPointMake(0, 0);
    gradientB.endPoint = CGPointMake(0, 1.0);
    [bottomV.layer addSublayer:gradientB];
    return view;
}

  • 自定义的cell中的demo:
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        UIView *leftView = [[UIView alloc] initWithFrame:CGRectMake(2, 0, 6, cellHeight)];
        [self addSubview:leftView];
        CAGradientLayer *gradient = [CAGradientLayer layer];
        gradient.frame = leftView.bounds;
        // 渐变色数组
        gradient.colors = [NSArray arrayWithObjects:
                           (id)[UIColor colorWithRed:(0/255.0)  green:(0/255.0)  blue:(0/255.0)  alpha:0.12].CGColor,
                           (id)[UIColor colorWithRed:(0/255.0)  green:(0/255.0)  blue:(0/255.0)  alpha:0.0].CGColor, nil];
        gradient.startPoint = CGPointMake(1, 0);
        gradient.endPoint = CGPointMake(0, 0);
        [leftView.layer addSublayer:gradient];
        
        UIView *rightView = [[UIView alloc] initWithFrame:CGRectMake(kScreenWidth - 8, 0, 6, cellHeight)];
        [self addSubview:rightView];
        
        CAGradientLayer *gradientR = [CAGradientLayer layer];
        gradientR.frame = rightView.bounds;
        // 渐变色数组
        gradientR.colors = [NSArray arrayWithObjects:
                            (id)[UIColor colorWithRed:(0/255.0)  green:(0/255.0)  blue:(0/255.0)  alpha:0.12].CGColor,
                            (id)[UIColor colorWithRed:(0/255.0)  green:(0/255.0)  blue:(0/255.0)  alpha:0.0].CGColor, nil];
        gradientR.startPoint = CGPointMake(0, 0);
        gradientR.endPoint = CGPointMake(1, 0);
        [rightView.layer addSublayer:gradientR];
        
        self.testLabel = [UILabel new];
        [self addSubview:self.testLabel];
        self.testLabel.frame = self.frame;
    }
    return self;
}
  • demo地址,欢迎各位同行一起交流学习。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AGI阅读 16,019评论 3 119
  • 这是我准备在千聊分享用的稿子 主题是绘画中如何运用光影提升空间立体感。 首先郑重提示:这次分享都是基础内容,大牛们...
    文雅羊阅读 585评论 4 3
  • 突然有四五天的空档,赶紧买票带娃回家看望父母。这一个月虽然不在工作岗位上,还是安排很紧张,生活就应该是这样,紧凑的...
    李孟宸阅读 254评论 1 1
  • 被扼住咽喉的鲸鱼 跃起跌下 滔天的浪花在两边劈开 大海要被撕裂 撕裂一切方的和圆的 远的和近的 撕裂一切整的 整的...
    不吃猫的绿鲤鱼阅读 281评论 0 4
  • 奈曼旗源于奈曼部,最早称“乃蛮”。“奈曼”意为“八”。最初由八鄂拓克或和硕形成。奈曼旗住民,大约在秦汉时期就有,元...
    欧溪谧阅读 1,571评论 3 3