如何在高度动态变化的tableView单元格间绘制自定义分割线

适配动态高度cell的tableView分割线实现方案
别用背景图方案,以下几种方案都能自动适配cell动态高度,维护成本远低于切图:
- 自定义分割线View(通用性最强,支持任意自定义样式)
先关掉系统自带分割线:tableView.separatorStyle = .none
在自定义cell的初始化方法里,往contentView加一个专门做分割线的UIView,设置好对应颜色,用Auto Layout固定位置:
不管cell高度怎么变,分割线会自动贴在cell底部,左右边距固定,要改颜色、粗细、边距直接改对应属性就行,不用换图。如果需要做最后一个cell不显示分割线的效果,直接在// 分割线约束示例 separatorView.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 15).isActive = true separatorView.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -15).isActive = true separatorView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor).isActive = true // 1像素物理宽度,避免高分屏发虚 separatorView.heightAnchor.constraint(equalToConstant: 1 / UIScreen.main.scale).isActive = truecellForRowAt里判断indexPath,对应隐藏/显示separatorView即可。 - 系统原生分割线自定义(适合样式简单的场景)
如果你的分割线是纯色、固定边距的简单样式,完全不用自己加View,直接用系统提供的API调整即可:
要是需要给不同cell设置不同的分割线边距,直接在// 全局设置分割线边距、颜色 tableView.separatorInset = UIEdgeInsets(top: 0, left: 15, bottom: 0, right: 15) tableView.separatorColor = .systemGray4tableView(_:willDisplay:forRowAt:)代理方法里修改对应cell的separatorInset属性就行,原生支持动态cell高度,不会错位。
避坑提示:不要给分割线写死1pt高度,用
1 / UIScreen.main.scale才能拿到对应屏幕的1物理像素宽度,避免分割线在2x/3x屏上看起来偏粗、发虚。
内容的提问来源于stack exchange,提问作者Chaudhary
相关产品推荐
相关产品推荐

