如何增加UITableView分隔符高度?

我需要更多的空间(10px)之间的每个cell 。 我怎样才能做到这一点?

我已经添加了这个代码

 tableView.separatorStyle = UITableViewCellSeparatorStyleNone; 

我不认为使用标准API是可能的。 我想你会需要子类的UITableViewCell,并添加一个视图,模拟在单元格的底部分隔符。

你可能想检查这个问题,它似乎相关,并有一些示例代码: iPhone + UITableView +为分隔符放置图像

我已经看到许多笨重的解决scheme,如隐式单元格的UITableView子类,以及其他不太理想的解决scheme。 在这个线程。

初始化UITableView ,将UITableViewrowHeight属性设置为等于单元格高度+所需分隔符/空格高度的高度。

尽pipe不要使用标准的UITableViewCell类,相反,子类UITableViewCell类并重写它的layoutSubviews方法。 在那里,在调用super (不要忘记)之后,将单元格的高度设置为期望的高度。

奖金更新18/10月/ 2015年:

你可以有点聪明。 上面的解决scheme基本上把“分隔符”放在单元格的底部。 真正发生的事情是,行高由TableViewControllerpipe理,但单元格的大小要稍微调整一下。 这导致分隔符/空白处于底部。 但是,您也可以将所有子视图垂直居中,以便在顶部和底部保留相同的空间。 例如1pt和1pt。

您也可以在您的单元格子类上创buildisFirst,isLast便捷属性。 您可以在cellForRowAtIndexPath中将它们设置为yes。 这样你可以在layoutSubviews方法中处理顶部和底部分隔符的边框,因为这样可以访问这些属性。 这样,您可以处理边缘案例的顶部或底部 – 因为有时devise部门需要N + 1个分隔符,而单元格的数量只有N个。因此,您必须以特殊方式处理顶部或引导部分。 但最好是在单元格内而不是tableViewHeader或TableViewFooter中进行。

对我来说最好的方法,只需在cellForRowAtIndexPath或willDisplayCell中添加

 CGRect sizeRect = [UIScreen mainScreen].applicationFrame; NSInteger separatorHeight = 3; UIView * additionalSeparator = [[UIView alloc] initWithFrame:CGRectMake(0,cell.frame.size.height-separatorHeight,sizeRect.size.width,separatorHeight)]; additionalSeparator.backgroundColor = [UIColor grayColor]; [cell addSubview:additionalSeparator]; 

对于Swift 3.0:

 let screenSize = UIScreen.main.bounds let separatorHeight = CGFloat(3.0) let additionalSeparator = UIView.init(frame: CGRect(x: 0, y: self.frame.size.height-separatorHeight, width: screenSize.width, height: separatorHeight)) additionalSeparator.backgroundColor = UIColor.gray self.addSubview(additionalSeparator) 

您应该将此添加到单元格的方法awakeFromNib()以避免重新创build。

Swift中

最简单和最短的方式是在cellForRowAtIndexPathwillDisplayCell添加下面的代码片段:

 override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) { let additionalSeparatorThickness = CGFloat(3) let additionalSeparator = UIView(frame: CGRectMake(0, cell.frame.size.height - additionalSeparatorThickness, cell.frame.size.width, additionalSeparatorThickness)) additionalSeparator.backgroundColor = UIColor.redColor() cell.addSubview(additionalSeparator) } 

你可以在故事板中完全做到这一点。 这里是如何:

  • 去故事板并selecttableview
  • 显示大小检查器,从那里设置行高说140。
  • 然后显示“属性”检查器,然后将分隔符设置为“单线”和“样式”,然后select一种颜色
  • 然后在故事板(或在文档大纲)中select单元格
  • 并再次在大小检查器中,在表视图单元格下,将自定义行高设置为120。

就这样。 你的分离器将是20个单位高。

这是相当古老的。 不过,我会张贴我的方法。

简单地提高你的细胞高度,并为细胞分配一个掩模层,如下所示:

 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "...", for: indexPath) // Configure the cell... let maskLayer = CAShapeLayer() let bounds = cell.bounds maskLayer.path = UIBezierPath(roundedRect: CGRect(x: 2, y: 2, width: bounds.width-4, height: bounds.height-4), cornerRadius: 5).cgPath cell.layer.mask = maskLayer return cell } 

所以在这个例子中,我的分隔符高度是4。

玩的开心!

对于高度为50,行间距为5 pix的表格单元格。 宽度是320。

定义细胞的背景是清楚的:

 - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { cell.backgroundColor = [UIColor clearColor]; } 

设置单元格的高度,这是行的大小加上分隔符:

 -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ return 55; } 

并在cellForRowAtIndexPath中定义一个框,用行的大小(MINUS分隔符)来绘制背景颜色:

 UILabel *headerBackgroundLabel = [[UILabel alloc] initWithFrame:CGRectMake(0,0,320,50)]; backgroundBox.backgroundColor = [UIColor grayColor]; [cell addSubview:backgroundBox]; 

我做的更简单,更灵活。 有人可能把它称为黑客。 我称之为务实。

我隐藏标准的UITableViewSeparator。 然后我添加一个子视图到我的单元格,使用自动布局将其钉在顶部。 把高度固定到我想要的位置。 将其固定在两边的边缘上。 改变它的背景颜色。 我有一个简单的分隔符与我想要的高度。

你可能会怀疑在单元格层次结构中有多lessUIView。 它真的会有明显的不同吗? 可能不是 – 你已经把表格层次结构中的标准分隔符拿出来了。

我遇到了一个让我有效改变单元格之间差距的方法。

在“界面”构build器中,我将行高设置为46。

在TableView委托的cellForRowAtIndexPath方法中,我将单元格的框架设置为较小的值。

 cell.frame=CGRectMake(44,0,tableView.bounds.size.width,44) 

这给了我一个高度为44的单元格,它适合tableView的宽度,但为行提供的空间将是IB中定义的46。

我以编程方式填充单元格,所以这适合我。

你应该实施

 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 

委托方法。 并在那里返回100.0。