UITableVIewCell分割线样式

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

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

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

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

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

一.修改cell分割线的颜色

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

二.cell的分割线左对齐

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

- (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的分割线并无左对齐. ip

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

    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的这些小技巧彻底能够知足需求.

    固然,具体状况还需具体分析,可是掌握这些技巧仍是百利而无一害的. 

    我的总结,若有纰漏 请留言.

相关文章
相关标签/搜索