需要实现自定义UITableViewCell的缩进,首先想到的是 重写UITableView的代理方法 :

    override func tableView(_ tableView: UITableView, indentationLevelForRowAt indexPath: IndexPath) -> Int {
        return pdfOutlineData.GetDepth(Node: pdfOutlineList[indexPath.row])
    }

发现对于tableview并没有实现缩进,经过查阅资料,发现,该方法只针对默认的UITableViewCell有效,自定义UITableViewCell是无效的,因为系统并不知道需要缩进哪些Cell,解决方法是在自定义UITableViewCell类中重写 layoutSubviews方法:

    override func layoutSubviews() {
        super.layoutSubviews()
        var contentFrame = contentView.frame
        let offset = CGFloat(CGFloat(self.indentationLevel) * self.indentationWidth)
        contentFrame.origin.x = offset
        contentFrame.size.width -= offset
        self.contentView.frame = contentFrame
        
        self.layoutIfNeeded()
    }
}

并设置 indentationLevel 属性和 indentationWidth 属性,其中indentationWidth属性通过代理方法 indentationLevelForRowAt 获得。