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

Posted

技术标签:

【中文标题】如何让 UITableView 设置其单元格的插图而不在整个表格上设置插图?【英文标题】:How can I achieve having an UITableView set the insets of its cells without setting the inset on the entire table? 【发布时间】:2017-12-11 20:16:59 【问题描述】:

我有一个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)

【问题讨论】:

您的单元格是自定义 UITableViewCell 子类吗?如果是这样,您可以在其中编写布局代码。 @Connor 是的,我正在使用自定义 UITableViewCell 子类。但是我不能在那里写代码,因为单元格在不同的表格中使用,并且单元格不知道它在哪个表格中。 那么,在您的cellForRow 中,您可能正在传递一些对象来配置您的自定义单元格,对吗?我会扩展该对象(或传入第二个对象)以包含一些变量,该变量告诉单元格是否有条件地使用这种不同的布局。 @Connor 非常有效,但正如我所提到的,单元格上的override func layoutMarginsDidChange() 似乎没有效果。 cellForRow 被调用并且您正在创建您的单元格时,您应该在每个单独的单元格上设置它,然后再将单元格返回到 UITableView。 【参考方案1】:

确保限制在 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)

然后在tableViewcellForRowAt中,使用如下:

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

【讨论】:

以上是关于如何让 UITableView 设置其单元格的插图而不在整个表格上设置插图?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 UITableView 样式分组中设置单元格的角半径?

ios试图让文本剪辑超出uitableview单元格的范围

如何让 UITableView 在动态高度单元格中滚动到底部?

设置 tableviewcell 高度以显示具有动态高度单元格的完整内部/嵌套 uitableview

UITableview 自动换行长文本

如何避免在方向更改后调整 UITableView(旋转)单元格的大小?