如何删除 iOS 15 中的 header 部分分隔符

How to remove section header separator in iOS 15

在 iOS 15 中,UITableView 在部分 header 和第一个单元格之间添加分隔符:

如何隐藏或删除该分隔符?

一些注意事项:

  1. header 是从 tableView(_:viewForHeaderInSection:) 返回的自定义视图。
  2. 查看视图调试器时,我可以看到额外的分隔符实际上是第一个单元格的子视图,现在有一个顶部和一个底部分隔符。
  3. 除了设置 tableView.separatorInset 以更改单元格分隔符的插入外,这是一个完全标准的 table 视图,没有自定义。

选项 1: 也许通过将 UITableViewCellSeparatorStyleNone 与 table 视图一起使用并将单元格的系统背景视图替换为仅具有底线的自定义视图?

选项 2:使用来自 https://developer.apple.com/forums/thread/684706

的提示
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 150000 // only Xcode 13+ needs and can compile this
    if (@available(iOS 15.0, *)) {
        [self.tableview setSectionHeaderTopPadding:0.0f];
    }
#endif
}

您的问题可能有两种解决方案/

  1. 一个是

    self.tableView.separatorColor = self.tableView.backgroundColor

这是一个技巧解决方案,它使外线“消失”并保持分隔线可见

  1. 第二个是

如果不使用分组,请将 tableview 类型从分组更改为普通。

我相信 tableView.separatorStyle = .none 应该可以解决问题。

我遇到了类似的问题,但这是由于 table header 视图突然显示为 iOS 15 上的分隔符。唯一对我有用的是:

if #available(iOS 15.0, *)
{
    tableView.tableHeaderView = UIView()
}

在我的例子中,我想使用本机部分 header 和不同于 0 的顶部填充,所以如果你想删除每个部分的额外顶部和底部分隔符,这应该有效:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    // Dequeue cell and set it up ...
    if indexPath.row == 0 {
        let separator = cell.subviews.filter({
            [=10=].frame.minY == 0 && [=10=] !== cell.contentView
        }).first
        separator?.isHidden = true
        cell.separatorInset.left = 0 // Or whatever desired inset
    }
    if indexPath.row + 1 == dataSource[indexPath.section].count {
        cell.separatorInset.left = cell.bounds.width
    } else {
        cell.separatorInset.left = 0 // Or whatever desired inset
    }
    return cell
}

我可以用这段代码修复它。

if (@available(iOS 15.0, *)) {
    self.tableView.tableHeaderView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, CGFLOAT_MIN)];
    [self.tableView setSectionHeaderTopPadding:0.0f];
}

iOS15,Swift5

要删除 header 部分和第一个单元格之间的线,您应该在配置 UITableView 时将 sectionHeaderTopPadding 设置为零。

    if #available(iOS 15.0, *) {
        tableView.sectionHeaderTopPadding = 0.0
    }