iOS 8 UITableView分隔符插入0不起作用
  我有一个应用程序, UITableView的分隔符插入被设置为自定义值 - 右0 ,左0 。  这在iOS 7.x完美工作,但在iOS 8.0我发现分隔符插入在右侧设置为默认值15 。  即使在xib文件中它设置为0 ,它仍然显示不正确。 
  我如何删除UITableViewCell分隔边距? 
iOS 8.0在单元格和表格视图中引入了layoutMargins属性。
此属性在iOS 7.0上不可用,因此您需要确保在分配之前进行检查!
此外,Apple已将一个属性添加到您的单元格,以防止它继承您的表格视图的边距设置。 设置此属性后,您的单元格可以独立于表格视图来配置自己的边距。 把它看作是一种重载。
  该属性名为preservesSuperviewLayoutMargins ,将其设置为NO将允许单元格的layoutMargin设置覆盖TableView上设置的任何layoutMargin 。  它既节省时间( 您不必修改表视图的设置 ),并且更简洁。  详细解释请参考Mike Abdullah的答案。 
注意:接下来是一个干净的实施细胞级别的保证金设置 ,如迈克阿卜杜拉的答案中所表达的。 设置你的单元格的保留SuperviewLayoutMargins = NO将确保你的表视图不会覆盖单元格设置。 如果您确实希望整个表格视图具有一致的边距,请相应地调整您的代码。
设置您的单元格边距:
-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Remove seperator inset
    if ([cell respondsToSelector:@selector(setSeparatorInset:)]) {
           [cell setSeparatorInset:UIEdgeInsetsZero];
    }
    // Prevent the cell from inheriting the Table View's margin settings
    if ([cell respondsToSelector:@selector(setPreservesSuperviewLayoutMargins:)]) {
        [cell setPreservesSuperviewLayoutMargins:NO];
    }
    // Explictly set your cell's layout margins
    if ([cell respondsToSelector:@selector(setLayoutMargins:)]) {
        [cell setLayoutMargins:UIEdgeInsetsZero];
    }
}
将单元格上的保留SuperviewLayoutMargins属性设置为NO 应防止您的表视图覆盖您的单元格边距。 在某些情况下,它似乎无法正常工作。
如果全部失败,您可能会蛮力强制您的表视图边距:
-(void)viewDidLayoutSubviews
{
    [super viewDidLayoutSubviews];
    // Force your tableview margins (this may be a bad idea)
    if ([self.tableView respondsToSelector:@selector(setSeparatorInset:)]) {
        [self.tableView setSeparatorInset:UIEdgeInsetsZero];
    }
    if ([self.tableView respondsToSelector:@selector(setLayoutMargins:)]) {
        [self.tableView setLayoutMargins:UIEdgeInsetsZero];
    }
} 
...你去了! 这应该适用于iOS 7和8。
  编辑: Mohamed Saleh让我注意到iOS 9中可能发生的变化。如果您想自定义cellLayoutMarginsFollowReadableWidth或页边距,您可能需要将Table View的cellLayoutMarginsFollowReadableWidth为NO 。  你的里程可能会有所不同,这没有很好记录。 
此属性仅存在于iOS 9中,因此请务必在设置前进行检查。
if([myTableView respondsToSelector:@selector(setCellLayoutMarginsFollowReadableWidth:)])
{
    myTableView.cellLayoutMarginsFollowReadableWidth = NO;
} 
(上面的代码从iOS 8 UITableView分隔符插入0不工作)
编辑:这是一个纯粹的界面生成器方法:


注意:iOS 11更改并简化了大部分此类行为,即将进行更新...
  精氨酸!  在你的Cell子类中进行这些操作后, 
- (UIEdgeInsets)layoutMargins
{
    return UIEdgeInsetsZero;
}
  或者设置cell.layoutMargins = UIEdgeInsetsZero;  为我修好了。 
让我们花点时间在盲目充电之前了解问题,然后尝试解决问题。
  在调试器中快速浏览会告诉你分隔线是UITableViewCell子视图。  看起来单元本身对这些线路的布局承担了相当大的责任。 
  iOS 8引入了布局边距的概念。  默认情况下,视图的布局边距在所有方面都是8pt ,并且从祖先视图继承。 
  最好的情况是,在对其分隔线进行布局时, UITableViewCell选择尊重左侧布局边距,使用它来约束左侧插入边界。 
把所有这些放在一起,为了达到真正为零的理想插图,我们需要:
0 像这样,这是一个非常简单的任务:
cell.layoutMargins = UIEdgeInsetsZero;
cell.preservesSuperviewLayoutMargins = NO;
注意事项:
preservesSuperviewLayoutMargins SupersviewLayoutMargins。 0左边距,而不是设置preservesSuperviewLayoutMargins视图边距边界,但由于您无法控制整个层次结构,因此这看起来更具错误倾向。 0并保留其他值可能会稍微更清晰。 UITableView在普通样式表底部绘制的“额外”分隔符上有一个0插入,我猜这将需要在表级别指定相同的设置(还没有试过这个!) 