iOS中讓cell分割線頂頭的四種終極方法實(shí)現(xiàn):從小白到裝x

iOS中讓cell分割線頂頭在可認(rèn)知的范圍內(nèi),一共有四種辦法。但是度娘一抄一大把,往往給出的方法都是舍近求遠(yuǎn)。很多小白也是兩眼一閉,拿來(lái)就復(fù)制粘貼。

以后不要再求人了,也不用在度娘了。記住下面的方法,足夠應(yīng)對(duì)各種場(chǎng)景了。

1 iOS8以前

iOS8以前需要在controller中以下兩個(gè)方法中進(jìn)行約束。

- (void)viewDidLoad { [super viewDidLoad]; self.tableView.separatorInset = UIEdgeInsetsZero; self.tableView.layoutMargins = UIEdgeInsetsZero;}

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { cell.layoutMargins = UIEdgeInsetsZero; cell.separatorInset = UIEdgeInsetsZero;}

2 iOS8以后三種方法

2.1 在數(shù)據(jù)源方法中

在數(shù)據(jù)源方法tableView:cellForRowAtIndexPath:中,加入以下代碼。


cell.preservesSuperviewLayoutMargins = NO; cell.separatorInset = UIEdgeInsetsZero; cell.layoutMargins = UIEdgeInsetsZero;
  • 需要注意的是preservesSuperviewLayoutMargins和layoutMargins是iOS8以后才有的,separatorInset是iOS7以后才有的。

  • iOS7只有separatorInset的概念,在IOS7下tableView的分割線左邊有15像素的間距。

  • iOS8中l(wèi)ayoutMargins,用來(lái)表示子view和父view的間距,有8像素的間距。

  • preservesSuperviewLayoutMargins默認(rèn)為true表示開(kāi)啟子view與父view的間距。

2.2 在controller中

還有一種最簡(jiǎn)單的方法,只需要在controller的didviewloaded中加入一句話就可以了。


self.tableView.separatorInset = UIEdgeInsetsZero;

  • 需要注意的是,tablveView的separatorInset這個(gè)屬性是在iOS7之后才出現(xiàn)的。官方是這么描述的:
//NS_AVAILABLE_IOS(7_0) UI_APPEARANCE_SELECTOR; 
// allows customization of the frame of cell separators
@property (nonatomic) UIEdgeInsets separatorInset

2.3 最裝x的辦法:自己重繪分割線

這種辦法不太好講。為了效率,當(dāng)然是越簡(jiǎn)單越好,肯定不會(huì)挑這種辦法。當(dāng)然如果為了裝x,就另當(dāng)別論。但是很多時(shí)候裝x沒(méi)有裝好,就變裝13了。小心!


// 畫(huà)分割線 
UIView *lineView = [[UIView alloc] init]; lineView.backgroundColor = [UIColor lightGrayColor]; 
[self.contentView addSubview:lineView];

 // 獲取屏幕壓縮比例"縮放比例" 如果是1x屏幕比率就是1 如果是2x 比率就是2 如果是3x 比率就是3 
CGFloat scale = [UIScreen mainScreen].scale; 
[lineView mas_makeConstraints:^(MASConstraintMaker *make) { 
    make.left.right.offset(0); 
    make.top.equalTo(deleteBtn.mas_bottom).offset(margin);
// 讓分割線的高為永遠(yuǎn)都是1個(gè)像素 
make.height.offset(1 / scale); }];
  • 因?yàn)樘O(píng)果的屏幕有1x,2x,3x。所以平時(shí)在計(jì)算位置的時(shí)候都是按照像素點(diǎn)來(lái)計(jì)算的,如果真的是要按照像素計(jì)算,必須要把屏幕的縮放比例考慮進(jìn)去。

  • 用來(lái)表示1像素 :1 / [UIScreen mainScreen].scale

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言 一直有個(gè)誤解,認(rèn)為設(shè)置UITableViewCell的分割線距離cell左邊的間距比較麻煩,總是隱藏自帶的分...
    LittleYuz閱讀 1,922評(píng)論 0 1
  • 一般TableView設(shè)置全屏分隔線有下面三種方法 1.自定義cell,手動(dòng)添加分割線 隱藏自帶的tableVie...
    蘋(píng)果API搬運(yùn)工閱讀 23,864評(píng)論 23 176
  • nginx安裝與配置 1進(jìn)入linix系統(tǒng) 我們是通過(guò)putty.exe鏈接到遠(yuǎn)程的服務(wù)器(它是linix系統(tǒng)) ...
    just_me1989閱讀 364評(píng)論 0 0
  • 不知道從什么時(shí)候開(kāi)始,懶得去思考,去抒發(fā),去總結(jié)了。心里的想法若隱若現(xiàn),也沒(méi)積極的去抓住。其實(shí),一直在想做一個(gè)有思...
    遇見(jiàn)久伴閱讀 199評(píng)論 0 0
  • 問(wèn)題 什么樣的一張紙能提高哪些工作方面的效率,應(yīng)該怎么去做 核心內(nèi)容 不管什么事情,都能用一張紙通過(guò)簡(jiǎn)單的幾個(gè)維度...
    一往情深似海閱讀 286評(píng)論 0 0

友情鏈接更多精彩內(nèi)容