您可以更改不同表格视图单元格的分隔符宽度吗?
Posted
技术标签:
【中文标题】您可以更改不同表格视图单元格的分隔符宽度吗?【英文标题】:Can you change separator width for different tableview cells? 【发布时间】:2020-03-10 16:00:06 【问题描述】:如果之前有人问过这个问题或者答案很明显,我提前道歉——我只是很难找到这个问题的好答案。
表格视图中的不同单元格是否可以有不同的分隔符宽度? 我想让前几个单元格的分隔符宽度较短,最后一个单元格让顶部和底部分隔符边到边。
示例图片:
我可以通过在情节提要中将分隔符样式设置为“无”来伪造所需的外观,然后在每个单元格中添加一个浅灰色 UIView 作为分隔符(在 cellForRow 方法内)。但是,如果可能的话,我想避免这种情况。
有没有更好的方法来更改不同单元格的分隔符宽度? 注意:我使用的是 Swift
【问题讨论】:
您是否尝试过使用cell.separatorInset
?执行此操作的最佳位置可能是在 willDisplayCell
方法内,并根据需要为特定的 indexPath.row
设置插图。
【参考方案1】:
您可以使用cell.separatorInset
更改分隔符的尺寸。
例如,这为前三个单元格绘制了一个较短的分隔符:
override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath)
if indexPath.row < 3
cell.separatorInset = UIEdgeInsetsMake(0, 30, 0, 11) // shorter separator
else
cell.separatorInset = UIEdgeInsetsMake(0, 3, 0, 11) // longer separator
来自willDisplayCell
文档:
表格视图在使用单元格绘制行之前将此消息发送给其委托人,从而允许委托人在单元格对象显示之前对其进行自定义。此方法使委托有机会覆盖先前由表视图设置的基于状态的属性,例如选择和背景颜色。代理返回后,表格视图仅设置 alpha 和 frame 属性,然后仅在行滑入或滑出时设置动画。
【讨论】:
非常感谢科恩!您的解决方案完美运行。请问——您更喜欢将其放在 willDisplay 单元格而不是 cellForRow 中的原因是什么?【参考方案2】:对我来说,我使用了一个自定义单元格,分隔线占据整个宽度,但我想要默认样式,较短的样式,其中分隔线不显示在单元格图标图像下。我希望它始终与我的单元格标签领先位置保持一致,例如 iPhone 的设置。
我在 tableView 单元格文件中编写了以下代码以实现该效果。
override func layoutSubviews()
super.layoutSubviews()
let g = contentView
NSLayoutConstraint.activate([
iconContainer.centerYAnchor.constraint(equalTo: g.centerYAnchor),
iconContainer.leadingAnchor.constraint(equalTo: g.leadingAnchor, constant: 20),
iconContainer.widthAnchor.constraint(equalTo: g.heightAnchor, constant: -12),
iconContainer.heightAnchor.constraint(equalTo: iconContainer.widthAnchor),
iconImageView.centerXAnchor.constraint(equalTo: iconContainer.centerXAnchor),
iconImageView.centerYAnchor.constraint(equalTo: iconContainer.centerYAnchor),
iconImageView.widthAnchor.constraint(equalTo: iconContainer.widthAnchor, constant: -10),
iconImageView.heightAnchor.constraint(equalTo: iconImageView.widthAnchor),
label.leadingAnchor.constraint(equalTo: iconContainer.trailingAnchor, constant: 20),
label.trailingAnchor.constraint(equalTo: g.trailingAnchor, constant: -20),
label.centerYAnchor.constraint(equalTo: g.centerYAnchor)
])
separatorInset = UIEdgeInsets(top: 0,
left: 40 + iconContainer.frame.size.width,
bottom: 0,
right: 0)
【讨论】:
以上是关于您可以更改不同表格视图单元格的分隔符宽度吗?的主要内容,如果未能解决你的问题,请参考以下文章