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的這些小技巧徹底能夠知足需求.

    固然,具體狀況還需具體分析,可是掌握這些技巧仍是百利而無一害的. 

    我的總結,若有紕漏 請留言.

相關文章
相關標籤/搜索