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 条评论
登录 后参与评论

相关文章

来自专栏Android先生

自定义view实现超萌动感小炸弹

Hello,小伙伴们,我回来了。这些日子有的小伙伴问我怎么没有更新了。这个其实是有原因,首先,最近有点忙。其次没有看到什么觉得好玩的动画!最后,就是我更新过了!...

952
来自专栏河湾欢儿的专栏

响应式布局rem布局

第一步:从UI设计师拿到设计稿(psd) 640*1136 第二部:在样式中给HTML一个fontSize值,我们一般都给一个比较好算的值,比如:10px 1...

2231
来自专栏vue学习

小程序 — 展开/收起

(1)首先我们应该在data中定义一个变量isShow用来控制样式的切换,默认为收起状态(即不展示)。

3554
来自专栏前端学习心得

实现三栏布局的几种方法

三栏布局,顾名思义就是两边固定,中间自适应。三栏布局在实际的开发十分常见,比如淘宝网的首页,就是个典型的三栏布局:即左边商品导航和右边导航固定宽度,中间的主要内...

1821
来自专栏iOS 开发

导航栏的设置 背景 线

22810
来自专栏HTML5学堂

CSS3的loading制作,让页面加载时不再单调

页面的loading效果一直都是个比较重要的制作,往往一个好的加载效果可以有效的提升用户体验。而实际开发中,loading效果具体该如何制作?前端工程师又会有哪...

3849
来自专栏前端杂货铺

弹窗层效果的实现(非jQuery实现)

要想实现弹窗的效果,首先应该创建一个覆盖层maskLayer,以及一个显示层presentLayer。 其次,每次弹窗时(除首次弹窗外),maskLayer的显...

5289
来自专栏一“技”之长

iOS开发UINavigation系列三——工具栏UIToolBar

        iOS中除了UINavinationBar之外,还有工具栏UIToolBar可以供我们使用,工具栏和导航栏十分类似,只是功能更加简单,工具栏中也...

671
来自专栏前端知识分享

第101天:CSS3中transform-style和perspective

1、transform-style属性是3D空间一个重要属性,指定嵌套元素如何在3D空间中呈现。

1263
来自专栏mukekeheart的iOS之旅

IOS开发之尺寸

  在移动端或者前端开发中,UI图通常是带标注的,指定某个控件的长宽等属性,一般UI给的是68px,72px这样的样式,但是我们在开发过程中通常又并不是完全按照...

1354

扫码关注云+社区