【第22期】观点:IT 行业加班,到底有没有价值?

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 UITableView默认分割线左对齐(不留间距)

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

解决tableView分割线不顶头

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

UITableViewCell 分隔线顶头显示

原因是默认有INSET,需要重新置为0. -(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCe...
  • anmo
  • anmo
  • 2015-11-19 13:31
  • 879

tips

修改返回按钮: UIImage *backImage = [UIImage imageNamed:@"navback"];     [[UIBarButtonItem appearance] set...

解决UITableView分割线距左边有距离的办法

解决UITableView分割线距左边有距离的办法,有需要的朋友可以参考下。 我们在使用tableview时会发现分割线的左边会短一些,通常可以使用setSeparatorInset:UIEdgeInsetsZero 来解决。但是升级到XCode6之后,在iOS8里发现没有效果。下面给出解决办法: 首先在viewDidLoad方法中加上如下代码: if ([self.tableView respondsToSelector:@selector(setSeparatorInset:)]) { [self.tableView setSeparatorInset:UIEd
  • iaiai
  • iaiai
  • 2015-07-05 10:13
  • 247

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

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

UITableView 隐藏多余的Cell的分割线

- (void)setExtraCellLineHidden: (UITableView *)tableView { UIView *view = [UIView new]; view.backgroundColor = [UIColor clearColor]; [tableView setTableFooterView:view]; } <p class

iOS TableViewCell自定义分割线

产品设计的要求cell的分割线长度不用是整个屏幕宽,并且设计要求分割线为2px(两条),上下不同色。 实现如下: UITableView中将分割线样式改为None [code="java"]tableView.separatorStyle = UITableViewCellSeparatorStyleNone;[/code] 自定义UITableViewCell中复写- (void)drawRect:(CGRect)rect方法 [code="java"]- (void)drawRect:(CGRect)rect { CGContextRef context =

tableView 分割线顶头

#pragma mark tableviewcell 分割线顶头 - (void)viewDidLayoutSubviews { if ([self.setTable respondsToSe...

灰色分割线

1: 百搭灰色           &lt;hr align="center" width="100%" size="1" color="#D7D7D7"&gt;
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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