如何让 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 样式分组中设置单元格的角半径?
如何让 UITableView 在动态高度单元格中滚动到底部?