UITableVIewCell分割线样式

在使用系统自带的UITableVIewCell的时候你有没有遇到过这样的困惑呢 ? 

1.如何修改cell分割线的颜色 ?

2.如何能让cell的分割线左对齐?

3.如何单独让某个cell的分割线消失?

4.既设置了 cell.imageView 又设置了 cell.titleLabel.text 的cell 如何让分割线和图片左对齐,而不是和文字左对齐 ?

一.修改cell分割线的颜色

第一个问题十分简单,设置 self.tableView.separatorColor = [UIColor orangeColor]; 就可以设置cell分割线的颜色了.

二.cell的分割线左对齐

要解决第二个问题需要需要在tableView的代理方法中进行如下设置 :

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {

    if ([cell respondsToSelector:@selector(setSeparatorInset:)]) {
        [cell setSeparatorInset:UIEdgeInsetsZero];
    }
    
    if ([cell respondsToSelector:@selector(setLayoutMargins:)]) {
        [cell setLayoutMargins:UIEdgeInsetsZero];
    }

    if([cell respondsToSelector:@selector(setPreservesSuperviewLayoutMargins:)]){
        [cell setPreservesSuperviewLayoutMargins:NO];
    }
}

此时的效果图如下:

         

此时展示出来的有内容的cell 分割线都已经是左对齐的了. 但是还有一部分多余的cell的分割线并没有左对齐. 

至于下面多余的cell的分割线有两种处理方式 

    1. 设置 self.tableView.tableFooterView = [[UIView alloc] init]; 可以直接把多余的cell隐藏掉. 这是一个非常有用的小技巧 , 更多使用小技巧可以查看  http://my.oschina.net/zhxx/blog/648764 

    2. 在viewDidLoad 方法中 设置:

    if ([self.tableView respondsToSelector:@selector(setSeparatorInset:)]) {

        [self.tableView setSeparatorInset:UIEdgeInsetsZero];
    } 

    if ([self.tableView     respondsToSelector:@selector(setLayoutMargins:)]) {

        [self.tableView setLayoutMargins:UIEdgeInsetsZero];

    }

这样多余的cell 分割线就会左对齐了 .

通常我们用的都是第一种方法 把多余的cell 直接隐藏! 效果如图:

三.cell的分割线位置偏移

第三个问题和第四个问题性质类似所以就放在一起说了, 先看两张效果图 :

                                                 

  第五个cell分割线与图片左对齐(cell分割线左偏移)                  隐藏某一行cell分割线.(cell分割线右偏移)  

正常情况下,  当cell 既设置了 cell.imageView.image 又设置了 cell.titleLabel.text 时, 分割线默认是和 titleLabel左对齐的 , 如果要设置cell分割线和图片左对齐需要在cell的代理方法中设置:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID];
    cell.textLabel.text = [NSString stringWithFormat:@"这是第%ld个cell",indexPath.row + 1];
    cell.imageView.image = [UIImage imageNamed:@"1"];

    if (indexPath.row == 4) {
        cell.separatorInset = UIEdgeInsetsMake(0, -100, 0, 0);
    }
    
    cell.imageView.clipsToBounds = YES;
    return cell;
}

这里设置 UIEdgeInsetsMake(0, -100, 0, 0);  向左偏移的值为 -100 但是并没有向左边偏移了 -100的距离,原因和  问题二 中出现的现象原因一致 (内边距的原因) . 其实只要设置的值只要 只要大于一定的距离就可以保证 cell的分割线和图片是对齐的 .----> 距离 =  cell.titleLabel的x值 - cell.imageView的x值. 当然这个值必须是负的.

如果想让cell的分割线向右偏移,在cell的代理方法中设置  cell.separatorInset = UIEdgeInsetsMake(0, 200, 0, 0);  如果想隐藏cell的分割线,设置向右的偏移量为 screenWidth 即可.需要注意的是: 此时 titleLabel的位置也会跟着偏移 . 效果见上图 右.

  讲了这么多其实还有一种方法可以方便的解决以上各种问题,那就是自定义 cell . 虽然如此,但是对于大部分app,其设置页面完全不需要使用自定义cell的(使用自定义cell有点杀鸡焉用宰牛刀的感觉),掌握了cell的这些小技巧完全可以满足需求.

    当然,具体情况还需具体分析,但是掌握这些技巧还是百利而无一害的. 

    个人总结,如有纰漏 请留言.

转载于:https://my.oschina.net/zhxx/blog/739525

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值