iOS開發之TableView實現完整的分割線詳解_IOS

來源:互聯網
上載者:User

前言

在我們建立一個tableView的時候,細心的你有沒有發現UITableViewCell左側會有空白。而我們在開發中有這樣的需求: 需要一根完整的分割線(去掉煩人的空白部分, 即分割線的寬度 == 螢幕的寬度)。

那麼下面我就講一講該如何去掉空白的部分,顯示完整的分割線。

這裡我提供兩種方法 :

第一種方法,也是我們最常用的方法,也是在我們自訂cell的時候所用到的. 即去掉tableView預設的分割線,自訂cell,重寫setFrame: 方法即可

下面是具體代碼實現:

步驟一 : 移除系統預設的分割線

// 設定分割線的樣式為None.self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;

tableView有個separatorStyle屬性, 即分割線的樣式.這是一個枚舉類型. 我們按著command點擊它進入他的屬性中會發現如下代碼:

typedef NS_ENUM(NSInteger, UITableViewCellSeparatorStyle) { UITableViewCellSeparatorStyleNone, //不顯示分割線  UITableViewCellSeparatorStyleSingleLine,// 單線  UITableViewCellSeparatorStyleSingleLineEtched // 這種分離式僅支援分組樣式表視圖 // This separator style is only supported for grouped style table views currently}

步驟二 : 重寫setFrame: 方法

注意重寫setFrame: 方法是需要我們寫在UITableViewCell中的, 上面也說過,這種方法適用於自訂cell.

下面是代碼:

- (void)setFrame:(CGRect)frame { frame.origin.y += 1;  // 讓cell的y值增加1(根據自己需要分割線的高度來進行調整) frame.size.height -= 1; // 讓cell的高度減1 [super setFrame:frame]; // 別忘了重寫父類方法}

通過上面兩個步驟,就會去掉系統預設的分割線,產生我們自己的分割線. 這種方法是不是很簡單呢? 如果需要自訂分割線的顏色,只需要設定`separatorColor`為你需要的顏色就可以啦.

第二種方法也很簡單,此方法不需要我們自訂cell,使用預設的tableViewcell也可以成功.這裡需要說明說的是:

     ios7中,UITableViewCell左側會有預設15像素的空白.設定setSeparatorInset:UIEdgeInsetsZero 能將空白去掉.

     ios8中,setSeparatorInset:UIEdgeInsetsZero 的設定已經不起作用了.

下面是解決辦法,首先在viewDidLoad方法加入以下代碼:

if ([self.tableView respondsToSelector:@selector(setSeparatorInset:)]) {// 如果tableView響應了setSeparatorInset: 這個方法,我們就將tableView分割線的內邊距設為0.  [self.tableView setSeparatorInset:UIEdgeInsetsZero];}if ([self.tableView respondsToSelector:@selector(setLayoutMargins:)]) {// 如果tableView響應了setLayoutMargins: 這個方法,我們就將tableView分割線的間距距設為0.  [self.tableView setLayoutMargins:UIEdgeInsetsZero];}

然後在UITableView的代理方法中加入以下代碼

- (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];  }}

總結

以上就是這篇文章的全部內容了,通過上述兩個步驟也可以實現讓cell 的分割線完整的顯示出來. 小夥伴們,趕緊試試吧.  如果有什麼更好的辦法,或者是其他的思路可以留言交流。 同時非常歡迎提出寶貴的意見.希望本文的內容對大家的學習或者工作能帶來一定的協助。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.