分隔线之前的空白行放入我的TableView中

我有一个关于UITableView的问题…我有一个UITableViewController,我创build了一个自定义的单元格。 当我看到tableView时,在分隔线之前看到一个小小的空白,你可以看到这个截图:

在这里输入图像说明

为什么? 这是一个默认的可视化? 我可以改变一些东西来删除这个白色的左边填充吗?

iOS 7中默认提供了主要的空白,即使是自定义单元格也是如此。

检出这个属性UITableviewCell属性separatorInset删除/添加单元格行分隔符两端的白色间距。

//删除空格

 cell.separatorInset = UIEdgeInsetsZero; 

另外,在UITableView级别,你可以使用这个属性 –

 if ([tableView respondsToSelector:@selector(setSeparatorInset:)]) { // Safety check for below iOS 7 [tableView setSeparatorInset:UIEdgeInsetsZero]; } 

更新 – 下面的代码适用于iOS 7和iOS 8:

 -(void)viewDidLayoutSubviews { if ([self.tableView respondsToSelector:@selector(setSeparatorInset:)]) { [self.tableView setSeparatorInset:UIEdgeInsetsZero]; } if ([self.tableView respondsToSelector:@selector(setLayoutMargins:)]) { [self.tableView setLayoutMargins:UIEdgeInsetsZero]; } } -(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { if ([cell respondsToSelector:@selector(setSeparatorInset:)]) { [cell setSeparatorInset:UIEdgeInsetsZero]; } if ([cell respondsToSelector:@selector(setLayoutMargins:)]) { [cell setLayoutMargins:UIEdgeInsetsZero]; } } 

或者,您也可以在界面构build器(IB)中对其进行编辑:

  1. 去IB。
  2. select表格视图。
  3. 打开右侧的“属性检查器”。
  4. 将“分隔符插入”从“默认”更改为“自定义”。
  5. 将“左”属性从15更改为0。

这与@Ashok的答案具有相同的效果,但不需要编写任何代码。

更新适用于iOS 7和8

更新在iOS 9上工作

使用下面的代码来删除UITableView中不需要的填充。 它适用于IOS 8和7

 -(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { if ([tableView respondsToSelector:@selector(setSeparatorInset:)]) { [tableView setSeparatorInset:UIEdgeInsetsZero]; } if ([tableView respondsToSelector:@selector(setLayoutMargins:)]) { [tableView setLayoutMargins:UIEdgeInsetsZero]; } if ([cell respondsToSelector:@selector(setLayoutMargins:)]) { [cell setLayoutMargins:UIEdgeInsetsZero]; } } 

没有空白! 我为此input了一个错误,苹果公司把它closures为“不是一个错误”,但告诉我为什么它不是一个错误。 我写了一个简单的项目 ,为应用程序中的每个可能的视图设置颜色。 我看到的是这些像素的颜色实际上是单元格本身的背景颜色(而不是内容视图!),正如苹果告诉我的那样。

cell.contentView.backgroundColor是绿色的,cell.background的颜色是红色的(用Pixie拍摄):

在这里输入图像说明

最后,没有分隔符,cell.contentView完全填充单元格。 使用分隔符,底部有一个像素或两个间隙。 插入时,分隔符填补了大部分的空白,但是有一些像素显示出来。

谜团已揭开!

编辑:这似乎取决于你如何configuration你的故事板,contentView.backgroundColor得到“失去”或设置为白色。 如果你在提供细胞的时候过度使用它,你可以得到你想要的行为:

  let cell = tableView.dequeueReusableCellWithIdentifier("FOO", forIndexPath: indexPath) as UITableViewCell cell.backgroundColor = UIColor.redColor() cell.contentView.backgroundColor = UIColor.greenColor() 

迅速

 cell.separatorInset = UIEdgeInsetsMake(0, 0, cell.frame.size.width, 0) if (cell.respondsToSelector("preservesSuperviewLayoutMargins")){ cell.layoutMargins = UIEdgeInsetsZero cell.preservesSuperviewLayoutMargins = false } 

这个为我工作

谢谢

这为我做了诡计:

 cell?.layoutMargins = UIEdgeInsetsZero; cell?.preservesSuperviewLayoutMargins = false 

对于那些想要在Swift中保留UIEdgeInsetSettings并且不使用Storyboard的人:

之前:(默认行为)

之前,默认设置

添加下面的代码:

 tableView.separatorInset.right = tableView.separatorInset.left 

之后,实施

这是对于Swift 3和更高版本的UITableViewCell类的扩展

 extension UITableViewCell { func removeSeparatorLeftPadding() -> Void { if self.responds(to: #selector(setter: separatorInset)) // Safety check { self.separatorInset = UIEdgeInsets.zero } if self.responds(to: #selector(setter: layoutMargins)) // Safety check { self.layoutMargins = UIEdgeInsets.zero } } } 

用法:

 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell : UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "menuCellID")! // .. Your other code cell.removeSeparatorLeftPadding() return cell } 

希望这有助于一个人!

纳雷什。