iOS中让cell分割线顶头的四种终极方法实现:从小白到装x1 iOS8以前2 iOS8以后三种方法

iOS中让cell分割线顶头在可认知的范围内,一共有四种办法。但是度娘一抄一大把,往往给出的方法都是舍近求远。很多小白也是两眼一闭,拿来就复制粘贴。

以后不要再求人了,也不用在度娘了。记住下面的方法,足够应对各种场景了。

1 iOS8以前

iOS8以前需要在controller中以下两个方法中进行约束。

- (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 在数据源方法中

在数据源方法tableView:cellForRowAtIndexPath:中,加入以下代码。

cell.preservesSuperviewLayoutMargins = NO; cell.separatorInset = UIEdgeInsetsZero; cell.layoutMargins = UIEdgeInsetsZero;
  • 需要注意的是preservesSuperviewLayoutMargins和layoutMargins是iOS8以后才有的,separatorInset是iOS7以后才有的。
  • iOS7只有separatorInset的概念,在IOS7下tableView的分割线左边有15像素的间距。
  • iOS8中layoutMargins,用来表示子view和父view的间距,有8像素的间距。
  • preservesSuperviewLayoutMargins默认为true表示开启子view与父view的间距。

2.2 在controller中

还有一种最简单的方法,只需要在controller的didviewloaded中加入一句话就可以了。

self.tableView.separatorInset = UIEdgeInsetsZero;
  • 需要注意的是,tablveView的separatorInset这个属性是在iOS7之后才出现的。官方是这么描述的:
//NS_AVAILABLE_IOS(7_0) UI_APPEARANCE_SELECTOR; 
// allows customization of the frame of cell separators
@property (nonatomic) UIEdgeInsets separatorInset

2.3 最装x的办法:自己重绘分割线

这种办法不太好讲。为了效率,当然是越简单越好,肯定不会挑这种办法。当然如果为了装x,就另当别论。但是很多时候装x没有装好,就变装13了。小心!

// 画分割线 
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);
// 让分割线的高为永远都是1个像素 
make.height.offset(1 / scale); }];
  • 因为苹果的屏幕有1x,2x,3x。所以平时在计算位置的时候都是按照像素点来计算的,如果真的是要按照像素计算,必须要把屏幕的缩放比例考虑进去。
  • 用来表示1像素 :1 / [UIScreen mainScreen].scale

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏小樱的经验随笔

2017"百度之星"程序设计大赛 - 复赛1003&&HDU 6146 Pokémon GO【数学,递推,dp】

Pokémon GO Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 32768/32768 K...

3297
来自专栏Android中高级开发

Android开发之漫漫长途 Ⅴ——Activity的显示之ViewRootImpl的PreMeasure、WindowLayout、EndMeasure、Layout、Draw

该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列。该系列引用了《Android开发艺术探索...

853
来自专栏HansBug's Lab

1627: [Usaco2007 Dec]穿越泥地

1627: [Usaco2007 Dec]穿越泥地 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 504  So...

2447
来自专栏進无尽的文章

浅汇-iOS 动画

        在iOS开发中,制作动画效果是最让开发者享受的环节之一。一个设计严谨、精细的动画效果能给用户耳目一新的效果,吸引他们的眼光 —— 这对于app而...

972
来自专栏我就是马云飞

从技术角度实现实现数字华容道

目的 上周新一期的最强大脑出来了,虽然上季被称为最强黑幕,不过呢。我决定还是看看= =。它里面第一关是叫做数字华容道。说白了,就是和拼图差不多。一开始我准备下一...

2245
来自专栏数据结构与算法

洛谷P2939 [USACO09FEB]改造路Revamping Trails(最短路)

题目描述 Farmer John dutifully checks on the cows every day. He traverses some of th...

3716
来自专栏学海无涯

iOS开发之UIScrollView无限滚动

UIScrollView 的无限滚动主要应用在图片轮播器、欢迎界面等场景。首先需要说明的是,文本所讲的是一种"笨办法",但是好理解且容易实现,在图片不多的时候用...

30210
来自专栏浅探ARKit

ARKit同时检测水平平面和竖直平面

ARKit1.5里,新增了检测竖直平面的功能。为此特意写一个demo。 下面是效果图: [IMG_3728.PNG] 和之前的水平平面相比 其实就是把多一个属性...

37610
来自专栏老司机的简书

老司机带你走进Core Animation 之图层的透视、渐变及复制

老司机的想法就是要把CoreAnimation头文件中的类大概都说一遍,毕竟一开始把系列名定成了《老司机带你走进CoreAnimation》(深切的觉得自己给自...

944
来自专栏一“技”之长

iOS8的新特性:简洁易用的毛玻璃效果 原

IOS8之前,apple官方并不建议开发者使用类似毛玻璃的模糊效果,也并没有开放相关的接口,大部分的开发者是通过转化CGImage这个类来实现毛玻璃的模糊效果,...

1056

扫码关注云+社区