为什么TableView在某些行上添加了不可见的分隔符?

时间:2017-02-17 08:57:16

标签: ios swift uitableview

enter image description here

此分隔符在普通视图中不可见。我将所有分隔层设置为红色并看到了它。如果我设置tableView.separatorStyle = .none,则此分隔符和普通分隔符不会添加到单元格中。易于重现:

  1. 添加TableViewController

  2. 设置单元格enter image description here

  3. 将代码添加到单元格:

    override func layoutSubviews() {
        super.layoutSubviews()
        let separators = self.subviews.filter({$0.bounds.height < 1 && $0.bounds.height > 0})
        separators.forEach({
            $0.layer.backgroundColor = UIColor.red.cgColor
        })
    
  4. 这是什么?

2 个答案:

答案 0 :(得分:1)

更换分隔符或以某种方式显示它或为每个部分显示不同的正确方法是:

override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
        switch indexPath.section {
        case 1:
            cell.separatorInset = UIEdgeInsetsMake(0.0, tableView.bounds.size.width, 0.0, 0);
            let additionalSeparatorThickness = CGFloat(1)
            let additionalSeparator: UIView = UIView(frame: CGRect(x: 15.0, y: cell.frame.size.height - additionalSeparatorThickness,
                                                                   width: cell.frame.size.width-30.0,
                                                                   height: additionalSeparatorThickness))
            additionalSeparator.backgroundColor = UIColor.Red
            cell.addSubview(additionalSeparator)
        default:
            break;
        }
    }

在上面的示例中(对线宽,高度,ecc进行了一些自定义),对于第1部分中的所有行,我们绘制了一个红线分隔符,而在其他部分中我们没有显示任何内容。

答案 1 :(得分:1)

好的,我明白了。这些不可见的视图不是分隔符,它们是在我使我的边距是相对的时创建的。