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的一些小技巧(分割线顶格显示等……)

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

UITableView 去掉多余行数、Cell系统分割线顶头

//去掉底部多余的表格线[self.mineTableView setTableFooterView:[[UIView alloc] initWithFrame:CGRectZero]]; //最后一...

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

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

UITableViewCell 令人蛋疼的分割线!!!!

你一定会遇到这样的需求: 使用UITableView来进行数据的展示,要求有分隔线,并且使分割线顶格。。。。 你肯定这么干过 这样... tableView.separatorInset = U...

ios tableView那些事 (十)设置 tableview 的分割线

[tableview setSeparatorColor:[UIColor blueColor]];  //设置分割线为蓝色 隐藏UITableViewCell的分隔线 [self....

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

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

解决tableView分割线不顶头

第一种(不自己划线) 第一步 //1.解决tableView分割线不顶头     if ([self.table respondsToSelector:@selector(setSeparato...

UItableViewCell的分割线顶头显示

实现如下代理方法即可- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowA...

TableView分割线顶不到头 解决

TableView的分割线 默认与左边有一段距离,取消这个默认间距需实现两个方法 /**  *  tableView线条顶到头的方法  */ -(void)viewDidLay...

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

//去掉底部多余的表格线      [tableViewsetTableFooterView:[[UIView alloc] initWithFrame:CGRectZero]]; //最...
  • saw471
  • saw471
  • 2016年04月11日 15:14
  • 2856
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS9 UITableViewCell 分割线左顶头
举报原因:
原因补充:

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