首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >iOS中让cell分割线顶头的四种终极方法实现:从小白到装x1 iOS8以前2 iOS8以后三种方法

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

作者头像
stanbai
发布2018-06-28 13:23:02
5920
发布2018-06-28 13:23:02
举报

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
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016.11.08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 iOS8以前
  • 2 iOS8以后三种方法
    • 2.1 在数据源方法中
      • 2.2 在controller中
        • 2.3 最装x的办法:自己重绘分割线
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档