在 iOS 14 中,Apple 终于减轻了这种痛苦。
如果你想...
- ...能够选择行(例如在编辑模式下)
- ...防止默认的灰色或蓝色单元格突出显示颜色
- ...保留默认的系统分隔符视图
...这会帮助你。在您的UITableViewCell
子类中,将其放入初始化程序中:
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
// Prevent cell highlighting while preserving selectability and separator views
if #available(iOS 14.0, *) {
var backgroundConfig = UIBackgroundConfiguration.listPlainCell()
backgroundConfig.backgroundColor = .clear
backgroundConfiguration = backgroundConfig
} else {
selectedBackgroundView = {
let bgView = UIView(frame: .zero)
bgView.translatesAutoresizingMaskIntoConstraints = false
bgView.backgroundColor = .clear
return bgView
}()
}
}
如果您只针对 iOS 14+,您可以忽略该else
块并完成。如果您还针对 iOS 13 及更低版本,您还需要覆盖layoutSubviews
以防止分隔符视图消失(感谢此评论:https ://stackoverflow.com/a/47573308/171933 )。这将解决问题(也在您的UITableViewCell
子类中):
override func layoutSubviews() {
super.layoutSubviews()
if #available(iOS 14.0, *) {
// no op
} else {
// Setting a custom selectedBackgroundView causes the system to hide the
// separatorView. If we want to have the separator, we need to show it again.
subviews.forEach { view in
if type(of: view).description() == "_UITableViewCellSeparatorView" {
view.alpha = 1.0
}
}
}
}
享受。