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