如何让UITableView设置其单元格的插图而不在整个表格上设置插入?

时间:2017-12-11 20:16:59

标签: ios swift uitableview uiedgeinsets

我有UITableViewCell内容扩展到其所有边缘。我在多个表中使用此单元格,它需要不同的插入。 (即一个表将从左侧插入8个点,另一个表将插入20个点。我想在父UITableView代码中缩进单元格(可能cellForRow?)而不用缩进整个表格。

这显然是为整个表格设置的,但我想根据需要逐个单元地进行:

tableView.contentInset = UIEdgeInsets(top: 0, left: 20, bottom: 0, right: -20)

这没有效果:

tableViewCell.contentView.layoutMargins = UIEdgeInsets(top: 0, left: 20, bottom: 0, right: -20)

这也不起作用(即使它在细胞本身上):

override func layoutMarginsDidChange() {
    super.layoutMarginsDidChange()

    self.layoutMargins = UIEdgeInsets(top: 0, left: 20 bottom: 0, right: -20)
}

2 个答案:

答案 0 :(得分:0)

确保限制xib / storyboard中的边距。然后在UITableViewCell

上设置以下内容
var topInset: CGFloat = 0
var leftInset: CGFloat = 0
var bottomInset: CGFloat = 0
var rightInset: CGFloat = 0

override func layoutMarginsDidChange() {
    super.layoutMarginsDidChange()
    self.layoutMargins = UIEdgeInsets(top: topInset, left: leftInset, bottom: bottomInset, right: rightInset)
}

然后在tableView cellForRowAt中,使用以下内容:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let browseTableViewCell = tableView.dequeueReusableCell(withIdentifier: "BrowseTableViewCell", for: indexPath) as! BrowseTableViewCell

    browseTableViewCell.leftInset = 20
    browseTableViewCell.rightInset = 20
    // Top and bottom insets are not needed. They will default to 0.

    return browseTableViewCell
}

答案 1 :(得分:0)

在Swift 4.2中,leftInset和rightInset不可用。将答案的第二部分替换为

browseTableViewCell.separatorInset = UIEdgeInsets(top: 0, left: 20, bottom: 0, right: 20)