我怎样才能让 UITableView 设置其单元格的插图而不在整个 table 上设置插图?
How can I achieve having an UITableView set the insets of its cells without setting the inset on the entire table?
我有一个 UITableViewCell
的内容延伸到它的所有边缘。我在多个 table 中使用此单元格,其中需要不同的插图。 (即一个 table 将它从左边插入 8 个点,另一个将它插入 20 个点。我想缩进父 UITableView
代码中的单元格(也许 cellForRow
?) 而不缩进整个 table.
这显然是为整个 table 设置的,但我想根据需要在逐个单元格的基础上进行设置:
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)
}
确保在 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
}
我有一个 UITableViewCell
的内容延伸到它的所有边缘。我在多个 table 中使用此单元格,其中需要不同的插图。 (即一个 table 将它从左边插入 8 个点,另一个将它插入 20 个点。我想缩进父 UITableView
代码中的单元格(也许 cellForRow
?) 而不缩进整个 table.
这显然是为整个 table 设置的,但我想根据需要在逐个单元格的基础上进行设置:
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)
}
确保在 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
}