iOS7 UITableView做成类似iOS6风格

原创作品,允许转载,转载时请务必以超链接形式标明文章  原始出处 、作者信息和本声明。否则将追究法律责任。 http://zmhot88.blog.51cto.com/1338337/1358996

iOS7扁平化设计已经成为了一个趋势基于对老版本的临时修改UITableView在sytle是group的时候是个大麻烦没办法改就改吧。

       直接用图片的方式是最简单的设置一个背景图拖一个UIImageView到你的Custom Cell中去设置普通和高亮情况下的image针对iOS7修改内部元素的frame设置默认的北京view为空代码如下

1
2
3
4
5
6
7
8
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
     ...........
     UIView *testView2 = [[UIView alloc] init];
     testView2.backgroundColor = UIColor.clearColor;
     cell.selectedBackgroundView = testView2;
     ......
}

这样基本就OK了。

       我在另一个文章里看到的方法确实通过自己写代码来实现大部分功能我觉得相对比较好但是很多阴影效果还是需要在研究研究的。主要是修改custom cell的setFrame,和修改tableview的

willDisplayCell来看看这两段代码

//custom 重写setFrame方法当然该方法最好针对iOS7才有效。

1
2
3
4
5
6
7
8
9
#define IOS7_OR_LATER   ( [[[UIDevice currentDevice] systemVersion] compare:@"7.0"] != NSOrderedAscending )
- ( void )setFrame:(CGRect)frame {
     if  (IOS7_OR_LATER) {
         NSInteger inset = 10;
         frame.origin.x += inset;
         frame.size.width -= 2 * inset;
     }
     [super setFrame:frame];
}

然后写UITableViewDelegate的回调函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
- ( void )tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
     if  ([cell respondsToSelector:@selector(tintColor)]) {
         if  (tableView == self.vTableView) {
             CGFloat cornerRadius = 10.f;
             cell.backgroundColor = UIColor.clearColor;
             CAShapeLayer *layer = [[CAShapeLayer alloc] init];
             CAShapeLayer *borderLayer = [[CAShapeLayer alloc] init];
             CAShapeLayer *selectedLayer = [[CAShapeLayer alloc] init];
                            
             CGMutablePathRef borderPathRef = CGPathCreateMutable();
             CGRect bounds0 = CGRectInset(cell.bounds, 0, 0);
             NSLog(@ "bound0:%@" ,NSStringFromCGRect(cell.frame));
             if  (indexPath.row == 0 && indexPath.row == [tableView numberOfRowsInSection:indexPath.section]-1) {
                 CGPathAddRoundedRect(borderPathRef, nil, bounds0, cornerRadius, cornerRadius);
             else  if  (indexPath.row == 0) {
                 CGPathMoveToPoint(borderPathRef, nil, CGRectGetMinX(bounds0), CGRectGetMaxY(bounds0)); //left bottom
                 CGPathAddArcToPoint(borderPathRef, nil, CGRectGetMinX(bounds0), CGRectGetMinY(bounds0), CGRectGetMidX(bounds0), CGRectGetMinY(bounds0), cornerRadius);
                 CGPathAddArcToPoint(borderPathRef, nil, CGRectGetMaxX(bounds0), CGRectGetMinY(bounds0), CGRectGetMaxX(bounds0), CGRectGetMidY(bounds0), cornerRadius);
                 CGPathAddLineToPoint(borderPathRef, nil, CGRectGetMaxX(bounds0), CGRectGetMaxY(bounds0));
             else  if  (indexPath.row == [tableView numberOfRowsInSection:indexPath.section]-1) {
                 CGPathMoveToPoint(borderPathRef, nil, CGRectGetMinX(bounds0), CGRectGetMinY(bounds0)); //left top
                 CGPathAddArcToPoint(borderPathRef, nil, CGRectGetMinX(bounds0), CGRectGetMaxY(bounds0), CGRectGetMidX(bounds0), CGRectGetMaxY(bounds0), cornerRadius);
                 CGPathAddArcToPoint(borderPathRef, nil, CGRectGetMaxX(bounds0), CGRectGetMaxY(bounds0), CGRectGetMaxX(bounds0), CGRectGetMidY(bounds0), cornerRadius);
                 CGPathAddLineToPoint(borderPathRef, nil, CGRectGetMaxX(bounds0), CGRectGetMinY(bounds0));
             else  {
                 CGPathAddRect(borderPathRef, nil, CGRectInset(cell.bounds, 0, 1));
             }
             borderLayer.path = borderPathRef;
             CFRelease(borderPathRef);
             cornerRadius = 7.f;
             CGMutablePathRef pathRef = CGPathCreateMutable();
             CGRect bounds = CGRectInset(cell.bounds, 1, 1);
             BOOL  addLine = NO;
             if  (indexPath.row == 0 && indexPath.row == [tableView numberOfRowsInSection:indexPath.section]-1) {
                 CGPathAddRoundedRect(pathRef, nil, bounds, cornerRadius, cornerRadius);
             else  if  (indexPath.row == 0) {
                 CGPathMoveToPoint(pathRef, nil, CGRectGetMinX(bounds), CGRectGetMaxY(bounds0));
                 CGPathAddArcToPoint(pathRef, nil, CGRectGetMinX(bounds), CGRectGetMinY(bounds), CGRectGetMidX(bounds), CGRectGetMinY(bounds), cornerRadius);
                 CGPathAddArcToPoint(pathRef, nil, CGRectGetMaxX(bounds), CGRectGetMinY(bounds), CGRectGetMaxX(bounds), CGRectGetMidY(bounds), cornerRadius);
                 CGPathAddLineToPoint(pathRef, nil, CGRectGetMaxX(bounds), CGRectGetMaxY(bounds0));
                 addLine = YES;
             else  if  (indexPath.row == [tableView numberOfRowsInSection:indexPath.section]-1) {
                 CGPathMoveToPoint(pathRef, nil, CGRectGetMinX(bounds), CGRectGetMinY(bounds0));
                 CGPathAddArcToPoint(pathRef, nil, CGRectGetMinX(bounds), CGRectGetMaxY(bounds), CGRectGetMidX(bounds), CGRectGetMaxY(bounds), cornerRadius);
                 CGPathAddArcToPoint(pathRef, nil, CGRectGetMaxX(bounds), CGRectGetMaxY(bounds), CGRectGetMaxX(bounds), CGRectGetMidY(bounds), cornerRadius);
                 CGPathAddLineToPoint(pathRef, nil, CGRectGetMaxX(bounds), CGRectGetMinY(bounds0));
             else  {
                 CGPathAddRect(pathRef, nil, CGRectInset(cell.bounds, 1, 0));
                 addLine = YES;
             }
             layer.path = pathRef;
             selectedLayer.path = pathRef;
             CFRelease(pathRef);
             layer.fillColor = [UIColor whiteColor].CGColor;
             selectedLayer.fillColor = [UIColor redColor].CGColor;
                            
             borderLayer.zPosition = 0.0f;
             borderLayer.strokeColor = [UIColor blueColor].CGColor;
             borderLayer.lineWidth = 1;
             borderLayer.lineCap = kCALineCapRound;
             borderLayer.lineJoin = kCALineJoinRound;
                            
             [borderLayer addSublayer:layer];
                            
             if  (addLine == YES) {
                 CALayer *lineLayer = [[CALayer alloc] init];
                 CGFloat lineHeight = (1.f / [UIScreen mainScreen].scale);
                 lineLayer.frame = CGRectMake(CGRectGetMinX(bounds)+1, bounds0.size.height-lineHeight, bounds0.size.width-2, lineHeight);
                 lineLayer.backgroundColor = tableView.separatorColor.CGColor;
                 [layer addSublayer:lineLayer];
             }
             //add general view
             UIView *testView = [[UIView alloc] initWithFrame:bounds];
             [testView.layer insertSublayer:borderLayer atIndex:0];
             testView.backgroundColor = UIColor.clearColor;
             cell.backgroundView = testView;
                            
             //add selected layer view;
             UIView *testView2 = [[UIView alloc] initWithFrame:bounds];
             [testView2.layer insertSublayer:selectedLayer atIndex:0];
             testView2.backgroundColor = UIColor.clearColor;
             cell.selectedBackgroundView = testView2;
         }
     }
}

代码至此结束看看最终的效果图吧

wKiom1L80InTangyAAEPm91qO84380.jpg


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值