iOS開(kāi)發(fā)之TableView實(shí)現(xiàn)完整的分割線詳解
前言
在我們創(chuàng)建一個(gè)tableView的時(shí)候,細(xì)心的你有沒(méi)有發(fā)現(xiàn)UITableViewCell左側(cè)會(huì)有空白。而我們?cè)陂_(kāi)發(fā)中有這樣的需求: 需要一根完整的分割線(去掉煩人的空白部分, 即分割線的寬度 == 屏幕的寬度)。
那么下面我就講一講該如何去掉空白的部分,顯示完整的分割線。
這里我提供兩種方法 :
第一種方法,也是我們最常用的方法,也是在我們自定義cell的時(shí)候所用到的. 即去掉tableView默認(rèn)的分割線,自定義cell,重寫(xiě)setFrame: 方法即可
下面是具體代碼實(shí)現(xiàn):
步驟一 : 移除系統(tǒng)默認(rèn)的分割線
// 設(shè)置分割線的樣式為None. self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
tableView有個(gè)separatorStyle屬性, 即分割線的樣式.這是一個(gè)枚舉類型. 我們按著command點(diǎn)擊它進(jìn)入他的屬性中會(huì)發(fā)現(xiàn)如下代碼:
typedef NS_ENUM(NSInteger, UITableViewCellSeparatorStyle) { UITableViewCellSeparatorStyleNone, //不顯示分割線 UITableViewCellSeparatorStyleSingleLine,// 單線 UITableViewCellSeparatorStyleSingleLineEtched // 這種分離式僅支持分組樣式表視圖 // This separator style is only supported for grouped style table views currently }
步驟二 : 重寫(xiě)setFrame: 方法
注意重寫(xiě)setFrame: 方法是需要我們寫(xiě)在UITableViewCell中的, 上面也說(shuō)過(guò),這種方法適用于自定義cell.
下面是代碼:
- (void)setFrame:(CGRect)frame { frame.origin.y += 1; // 讓cell的y值增加1(根據(jù)自己需要分割線的高度來(lái)進(jìn)行調(diào)整) frame.size.height -= 1; // 讓cell的高度減1 [super setFrame:frame]; // 別忘了重寫(xiě)父類方法 }
通過(guò)上面兩個(gè)步驟,就會(huì)去掉系統(tǒng)默認(rèn)的分割線,生成我們自己的分割線. 這種方法是不是很簡(jiǎn)單呢? 如果需要自定義分割線的顏色,只需要設(shè)置`separatorColor`為你需要的顏色就可以啦.
第二種方法也很簡(jiǎn)單,此方法不需要我們自定義cell,使用默認(rèn)的tableViewcell也可以成功.這里需要說(shuō)明說(shuō)的是:
ios7中,UITableViewCell左側(cè)會(huì)有默認(rèn)15像素的空白.設(shè)置setSeparatorInset:UIEdgeInsetsZero
能將空白去掉.
ios8中,setSeparatorInset:UIEdgeInsetsZero
的設(shè)置已經(jīng)不起作用了.
下面是解決辦法,首先在viewDidLoad方法加入以下代碼:
if ([self.tableView respondsToSelector:@selector(setSeparatorInset:)]) { // 如果tableView響應(yīng)了setSeparatorInset: 這個(gè)方法,我們就將tableView分割線的內(nèi)邊距設(shè)為0. [self.tableView setSeparatorInset:UIEdgeInsetsZero]; } if ([self.tableView respondsToSelector:@selector(setLayoutMargins:)]) { // 如果tableView響應(yīng)了setLayoutMargins: 這個(gè)方法,我們就將tableView分割線的間距距設(shè)為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]; } }
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,通過(guò)上述兩個(gè)步驟也可以實(shí)現(xiàn)讓cell 的分割線完整的顯示出來(lái). 小伙伴們,趕緊試試吧. 如果有什么更好的辦法,或者是其他的思路可以留言交流。 同時(shí)非常歡迎提出寶貴的意見(jiàn).希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助。
相關(guān)文章
iOS實(shí)現(xiàn)只有底部邊框線的輸入框示例代碼
這篇文章給大家分享了一種利用iOS實(shí)現(xiàn)只有底部邊框線的輸入框,其實(shí)這個(gè)效果也挺常見(jiàn)的,本文給出了示例代碼,下面來(lái)看看如何實(shí)現(xiàn)這種效果。2016-09-09iOS開(kāi)發(fā)中對(duì)文件目錄的訪問(wèn)及管理的基本方法小結(jié)
這篇文章主要介紹了iOS開(kāi)發(fā)中對(duì)文件目錄的訪問(wèn)及管理的基本方法小結(jié),代碼基于傳統(tǒng)的Objective-C,需要的朋友可以參考下2015-10-10詳解iOS開(kāi)發(fā)獲取當(dāng)前控制器的正取方式
這篇文章主要介紹了iOS開(kāi)發(fā)獲取當(dāng)前控制器的正取方式,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-09-09個(gè)人對(duì)于異步和多線程的關(guān)系的理解分享
異步和多線程并不是一個(gè)同等關(guān)系,異步是最終目的,多線程只是我們實(shí)現(xiàn)異步的一種手段。異步是當(dāng)一個(gè)調(diào)用請(qǐng)求發(fā)送給被調(diào)用者,而調(diào)用者不用等待其結(jié)果的返回而可以做其它的事情。2014-08-08ios 不支持 iframe 的完美解決方法(兼容iOS&安卓)
下面小編就為大家?guī)?lái)一篇ios 不支持 iframe 的完美解決方法(兼容iOS&安卓)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-07-07iOS復(fù)數(shù)cell下優(yōu)雅的代碼結(jié)構(gòu)詳解
這篇文章主要給大家介紹了關(guān)于iOS復(fù)數(shù)cell下優(yōu)雅的代碼結(jié)構(gòu)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用iOS具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04iOS 對(duì)NSMutableArray進(jìn)行排序和過(guò)濾的實(shí)例
下面小編就為大家分享一篇iOS 對(duì)NSMutableArray進(jìn)行排序和過(guò)濾的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-01-01IOS開(kāi)發(fā)之tableView點(diǎn)擊行跳轉(zhuǎn)并帶有“顯示”更多功能
這篇文章給大家介紹通過(guò)點(diǎn)擊城市中的tableView跳轉(zhuǎn)到旅游景點(diǎn)的tableView,下面會(huì)有“顯示”更多的功能,代碼簡(jiǎn)單易懂,對(duì)ios點(diǎn)擊tableview跳轉(zhuǎn)相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧2016-03-03詳解iOS應(yīng)用的設(shè)計(jì)模式開(kāi)發(fā)中Mediator中介者模式的使用
這篇文章主要介紹了iOS應(yīng)用的設(shè)計(jì)模式開(kāi)發(fā)中Mediator中介者模式的使用,示例代碼為傳統(tǒng)的Objective-C語(yǔ)言,需要的朋友可以參考下2016-03-03