Ios 为什么未列出UITableViewCell的分隔符视图?

Ios 为什么未列出UITableViewCell的分隔符视图?,ios,swift,uitableview,separator,subviews,Ios,Swift,Uitableview,Separator,Subviews,我想删除某些UITableViewCell分隔符,但不是全部 我在UI中看到它们,但不明白为什么在打印子视图层次结构时它们没有被列出 for view in cell.subviews { DDLogDebug(String(describing: type(of: view))) } 这似乎发生在最初的看法。如果我将UITableView单元格滚动到远离视图的地方,然后再滚动回来,UITableViewCell的分隔符会神奇地出现在子视图日志打印输出中。这是怎么回事 注意:我只在模拟

我想删除某些UITableViewCell分隔符,但不是全部

我在UI中看到它们,但不明白为什么在打印子视图层次结构时它们没有被列出

for view in cell.subviews {
    DDLogDebug(String(describing: type(of: view)))
}
这似乎发生在最初的看法。如果我将UITableView单元格滚动到远离视图的地方,然后再滚动回来,UITableViewCell的分隔符会神奇地出现在子视图日志打印输出中。这是怎么回事


注意:我只在模拟器上进行了测试,因为我目前没有iPhone X。

您可以使用情节提要和编程方式删除分隔符

故事板

只需单击表视图并转到属性检查器,从中选择分隔符并将其从默认值更改为无

代码

在viewDidLoad中使用以下代码

编辑隐藏或删除单个单元格的分隔


有人已经就此社区提出了评论性问题。处理单细胞分离的解决方案也是如此。

您可以使用故事板和编程方式删除分离器

故事板

只需单击表视图并转到属性检查器,从中选择分隔符并将其从默认值更改为无

代码

在viewDidLoad中使用以下代码

编辑隐藏或删除单个单元格的分隔


有人已经就此社区提出了评论性问题。处理单细胞分离的解决方案也是如此。

在细胞外部使用UITableViewCell似乎不如简单地对细胞进行子分类并从细胞内部进行控制那么可靠

因此,我的解决方案如下:

class myCell: UITableViewCell {

    var withSeparator: Bool = true

    func layoutSubviews() {
        super.layoutSubviews()

        if !withSeparator {
            self.removeBottomSeparator()
        }

    }
...



extension UITableViewCell {
    func removeBottomSeparator() {
        // Remove it if it's found.
        for view in self.subviews where String(describing: type(of: view)).hasSuffix("SeparatorView") {
            view.removeFromSuperview()
        }

    }
}

使用此方法可以让我每次都找到SeparatorView并将其删除 在单元外部使用UITableViewCell似乎不如简单地对单元进行子类化并从单元内部进行控制那么可靠

因此,我的解决方案如下:

class myCell: UITableViewCell {

    var withSeparator: Bool = true

    func layoutSubviews() {
        super.layoutSubviews()

        if !withSeparator {
            self.removeBottomSeparator()
        }

    }
...



extension UITableViewCell {
    func removeBottomSeparator() {
        // Remove it if it's found.
        for view in self.subviews where String(describing: type(of: view)).hasSuffix("SeparatorView") {
            view.removeFromSuperview()
        }

    }
}

使用此方法可以让我每次都找到SeparatorView并将其删除 我对iPhone X上的UITableView分隔符也有同样的问题。我能够通过改变手机背景来解决这个问题:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
   let cell: UITableViewCell = ...
   ...

   **cell.backgroundColor = .clear** // <= MAGIC LINE
   return cell
}

我对iPhone X上的UITableView分隔符也有同样的问题。我能够通过改变手机背景来解决这个问题:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
   let cell: UITableViewCell = ...
   ...

   **cell.backgroundColor = .clear** // <= MAGIC LINE
   return cell
}

除非我想删除某些UITableViewCell分隔符;不是所有的。@SebastianDwornik我编辑了我的答案,删除了某个UITableViewCell分隔。希望它能帮助你解决你的问题。如果您有任何进一步的问题,请告诉我。我以前读过这个解决方案,问题是将分隔符设置远离屏幕似乎也会改变iPhone X/8plus的边距。使文本标签最左或最右对齐:/除非我想删除某些UITableViewCell分隔符;不是所有的。@SebastianDwornik我编辑了我的答案,删除了某个UITableViewCell分隔。希望它能帮助你解决你的问题。如果您有任何进一步的问题,请告诉我。我以前读过这个解决方案,问题是将分隔符设置远离屏幕似乎也会改变iPhone X/8plus的边距。使文本标签最左或最右对齐:/我喜欢不加解释的否决票。我喜欢不加解释的否决票。