在 UITableViewCell 上设置自定义分隔符
Set custom separator insets on UITableViewCell
在我的 UITableView
中,我想要一个“centered”分隔符效果,其中分隔符从左侧缩小 30pt,从右侧缩小 30pt。
我已经设法通过 Interface Builder 设置 TableView 本身的 'Custom Insets' 属性 来实现这一点,但我无法通过代码重现此行为(我必须这样做就是这样)。
特别是这段代码:
self.tableView.separatorColor = .green
self.tableView.separatorStyle = .singleLine
self.tableView.separatorInset = UIEdgeInsets(top: 0, left: 30, bottom: 0, right: 30)
还有这个:
@objc(tableView:cellForRowAtIndexPath:) func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "recent_cell") as! TPExpandableTableViewCell
//setting cell insets
cell.separatorInset = separatorInset
cell.item = items[indexPath.row]
return cell
}
我在 iPhone 6S 模拟器 上获得了以下输出:
似乎分隔符内容视图缩小了,但分隔符背景视图没有缩小。我还尝试删除设置单元格的 separatorInset 的行,结果是一个等于 UIEdgeInset.zero
的插图
我可以确认绿色下的白线是与分隔符相关的视图,因为如果我将 separatorStyle 更改为 .none
,它就会消失
有帮助吗?
制作自定义分隔符的最佳方法是禁用 UITableView 分隔符并在单元格内创建一个具有所需高度(例如 1px)的视图,然后将约束添加到视图以使其位于单元格的底部中心。
基本上,第一段代码对于设置分隔符插入、颜色和样式是正确的:
self.tableView.separatorColor = .green
self.tableView.separatorStyle = .singleLine
self.tableView.separatorInset = UIEdgeInsets(top: 0, left: 30, bottom: 0, right: 30)
单元格的 separatorInset 是单元格的内容。所以我对你在这里真正想要实现的目标感到困惑。从你的最后一句话开始,你的内容被缩小了,这是由 'cell.separatorInset = separatorInset' 引起的,你不希望这样。
所以我建议你删除这行代码:
cell.separatorInset = separatorInset
问题:
分隔符后面的空白实际上属于单元格的背景颜色,而不是单元格的contentView
。
解决方案
因此,在创建自定义单元格时,设置 contentView.backgroundColor
不会更改该空白,但设置 cell.backgroundColor
会。
示例:
将此添加到自定义单元格的初始化程序中。
cell.backgroundColor = UIColor.red
在我的 UITableView
中,我想要一个“centered”分隔符效果,其中分隔符从左侧缩小 30pt,从右侧缩小 30pt。
我已经设法通过 Interface Builder 设置 TableView 本身的 'Custom Insets' 属性 来实现这一点,但我无法通过代码重现此行为(我必须这样做就是这样)。
特别是这段代码:
self.tableView.separatorColor = .green
self.tableView.separatorStyle = .singleLine
self.tableView.separatorInset = UIEdgeInsets(top: 0, left: 30, bottom: 0, right: 30)
还有这个:
@objc(tableView:cellForRowAtIndexPath:) func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "recent_cell") as! TPExpandableTableViewCell
//setting cell insets
cell.separatorInset = separatorInset
cell.item = items[indexPath.row]
return cell
}
我在 iPhone 6S 模拟器 上获得了以下输出:
似乎分隔符内容视图缩小了,但分隔符背景视图没有缩小。我还尝试删除设置单元格的 separatorInset 的行,结果是一个等于 UIEdgeInset.zero
我可以确认绿色下的白线是与分隔符相关的视图,因为如果我将 separatorStyle 更改为 .none
,它就会消失
有帮助吗?
制作自定义分隔符的最佳方法是禁用 UITableView 分隔符并在单元格内创建一个具有所需高度(例如 1px)的视图,然后将约束添加到视图以使其位于单元格的底部中心。
基本上,第一段代码对于设置分隔符插入、颜色和样式是正确的:
self.tableView.separatorColor = .green
self.tableView.separatorStyle = .singleLine
self.tableView.separatorInset = UIEdgeInsets(top: 0, left: 30, bottom: 0, right: 30)
单元格的 separatorInset 是单元格的内容。所以我对你在这里真正想要实现的目标感到困惑。从你的最后一句话开始,你的内容被缩小了,这是由 'cell.separatorInset = separatorInset' 引起的,你不希望这样。
所以我建议你删除这行代码:
cell.separatorInset = separatorInset
问题:
分隔符后面的空白实际上属于单元格的背景颜色,而不是单元格的contentView
。
解决方案
因此,在创建自定义单元格时,设置 contentView.backgroundColor
不会更改该空白,但设置 cell.backgroundColor
会。
示例:
将此添加到自定义单元格的初始化程序中。
cell.backgroundColor = UIColor.red