iOS9 UITableViewCell 分割线左顶头

原创 2016年05月30日 17:19:12

UITableViewCell在IOS6下分割线是默认顶头的,在IOS7以后左边会有一定的间距(15)。

网上有一些解决办法,分享我找到的最简单的一种:在数据源方法tableView:cellForRowAtIndexPath:中加入如下三行

        cell.preservesSuperviewLayoutMargins = NO;
        cell.separatorInset = UIEdgeInsetsZero;
        cell.layoutMargins = UIEdgeInsetsZero;

需要注意的是preservesSuperviewLayoutMarginslayoutMargins是iOS8以后才有的,separatorInset是iOS7以后才有的,如果要兼容以前的版本记得先判断selector是否存在。

至于原因如下:

Setting the separatorInset of tableView to UIEdgeInsetsZero is not going to work. It will only effect the extra separators, not the cells that you created.
iOS8 introduces layoutMargins property on UIView, along with another property called preservesSuperviewLayoutMargins indicating whether superview’s layoutMargins is preserved (Think of it as an override) which is YES by default. layoutMargins property is a set of insets from the edge of the view’s bounds that denote a default spacing for laying out content.
The default separatorInset of tableView and tableViewCell is (top = 0, left = 15, bottom = 0, right = 0)
The default layoutMargins of tableView and tableViewCell is (top = 8, left = 8, bottom = 8, right = 8)
These 3 properties are defining the behaviour of separator indentation.
However, setting tableView’s layoutMargins is not going to effect tableViewCell. Because tableViewCell’s superview is not tableView. It’s tableView’s subView, an instance of UITableViewWrapperView whose superClass is UIScrollView and whose layoutMargins is (top = 8, left = 15, bottom = 8, right = 15) and preservesSuperviewLayoutMargins is YES.
You have to set separatorInset and layoutMargins of tableViewCell directly:
tableViewCell.preservesSuperviewLayoutMargins = NO;
tableViewCell.separatorInset = UIEdgeInsetsZero;
tableViewCell.layoutMargins = UIEdgeInsetsZero;
You can put those code in cell’s init method or awakeFromNib or tableView’s delegate tableView:willDisplayCell:fromRowAtIndexPath, etc.

大致的意思是说iOS7只有separatorInset的概念,在IOS7下tableView的分割线左边有15像素的间距。

iOS8中还有layoutMargins,用来表示子view和父view的间距,有8像素的间距。preservesSuperviewLayoutMargins默认为true表示开启子view与父view的间距。


References:
《iOS8 UITableView 分割线顶头》
《iOS7 tableview separatorInset cell分割线左对齐》

版权声明:本文为博主原创文章,转载请标明原文地址以及作者(阿曌)。

相关文章推荐

ios tableView cell分割线顶到头处理

实现代理方法 - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtI...

iOS tableview的一些小技巧(分割线顶格显示等……)

UITableView是工程开发中最经常使用到的UI控件,但是你真的了解它嘛,这里记录几点有用的但你可能并不知道的。 当我们的数据未能显示满一屏幕的时候,UITableView会显示多余的横...

ios tableView去掉多余分割线 和最后一行分割线顶头显示

//去掉底部多余的表格线      [tableViewsetTableFooterView:[[UIView alloc] initWithFrame:CGRectZero]]; //最...
  • saw471
  • saw471
  • 2016-04-11 15:14
  • 2482

iOS -- UITableViewCell 下边的分割线左边顶不到头的问题

UITableViewCell 下边的分割线默认是到不了最左边的,但是有时候我们需要让它顶到头,需要设置tableView和cell的边界设置,距离边界为0; 首先设置tableView:  if...

iOS UITableView默认分割线左对齐(不留间距)

1. 在初始化UITableView的时候:     if([mainTableView respondsToSelector:@selector(setSeparatorInset:)]...

iOS——去掉tableViewCell之间分割线左侧的空白,使分割线从左右边框开始

导入下面这个方法即可,无需做特殊处理,前提是添加了tableView的代理方法 注意如果cell高度设置的有问题可能会挡住这条线 - (void)tableView:(UITableView *)...

storyboard 让TableViewCell的分割线顶到最左边

废话不多说,直接上图 这是我们要实现的效果,分割线顶到头 我们来开始,直接建个Demo,我们假设你已经建好了,storyboard 或者xib的控制器 直接运行,会发现前面好像有一段距离,如图:...
  • klshuo
  • klshuo
  • 2016-05-06 23:13
  • 1067

UITableViewCell的分割线

UITabViewCell自定义分割线 在UITableView的使用中,通常需要设置分割线。但是分割线会经常短一截的情况,针对这个情况,有三种方式可以解决。1 自定义UIView充当分割线 实现...

UITableViewCell的高亮和选中以及自绘分割线

UITableView是一个比较复杂的控件,不过再负责也是由一些基础的UIView组成的,它继承自UIScrollView,并由很多重用的cell组成。当然为了效率UITableView还做了很多优化...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)