显示行操作时,单元格下可以看到UITableView背景

时间:2017-04-19 07:04:34

标签: ios uitableview

我有UITableView白色部分标题和暗单元格。表背景也是白色的。这样做是为了在表弹跳时节部分看起来很好:

enter image description here

我在此表的行中添加了几个操作(UITableViewRowAction)。但是,有一个问题:由于行是黑暗的,当我滑动以显示行编辑操作时,第一个操作之间存在白色差距:

enter image description here

(请注意,单元格及其内容视图在XIB文件中设置了相同的深色背景颜色。)

在检查视图层次结构后,我发现在显示操作按钮后单元格会缩小,而我通过此间隙看到的是实际的表格视图。

由于我无法更改表格视图的背景,因此我尝试在其他所有观看次数下添加自定义背景视图:

self.tableBackgroundView = [[UIView alloc] initWithFrame:self.tableView.bounds];
self.tableBackgroundView.backgroundColor = [UIColor redColor];
self.tableBackgroundView.autoresizingMask = UIViewAutoresizingFlexibleSize;
[self.tableView addSubview:self.tableBackgroundView];
[self.tableView sendSubviewToBack:self.tableBackgroundView];

然而,它并没有很好地运作。

还有其他方法可以隐藏"单元格之间的空格及其编辑操作?

1 个答案:

答案 0 :(得分:0)

我设法通过在tableView:willDisplayCell:(每个单元格一个)内的每个单元格后面添加背景来克服此问题。

这是我的最终代码:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell
forRowAtIndexPath:(NSIndexPath *)indexPath {
    // Remove background gaps on the left and right sides of row separators on iOS < 10.
    cell.backgroundColor = cell.contentView.backgroundColor;

    // Remove another gap in row background when swiping in to the left to start editing.
    CGRect cellFrame = [cell convertRect:cell.bounds toView:tableView];
    UIView *backgroundView = self.cellBackgroundViews[indexPath];
    if (backgroundView == nil) {
        backgroundView = [[UIView alloc] init];
        self.cellBackgroundViews[indexPath] = backgroundView;
    }
    backgroundView.frame = CGRectInset(cellFrame, 0, -1);
    backgroundView.backgroundColor = cell.contentView.backgroundColor;
    [self.tableView addSubview:backgroundView];
    [self.tableView sendSubviewToBack:backgroundView];
}

- (void)tableView:(UITableView *)tableView didEndDisplayingCell:(UITableViewCell *)cell
forRowAtIndexPath:(NSIndexPath *)indexPath {
    UIView *backgroundView = self.cellBackgroundViews[indexPath];
    [backgroundView removeFromSuperview];
}