我在cellForRowAtIndexPath
中通过选择为表格视图单元格添加了颜色
let backgroundView = UIView()
backgroundView.backgroundColor = UIColor.grey3 //custom color
cell.selectedBackgroundView = backgroundView
由于我使用Xcode 11.0构建,因此颜色不再在iOS 13设备或模拟器上传播到单元的子视图。如果我使用Xcode 11.0在iOS 12.2模拟器上构建,它仍然可以正常工作。
任何人都知道发生了什么变化才能导致这种行为?我正在处理.xib文件。
答案 0 :(得分:1)
来自Apple的iOS 13 Release Notes:
当单元格突出显示或选中时,UITableViewCell类不再更改contentView及其任何子视图的backgroundColor或isOpaque属性。如果要在contentView内部(包括其中)的单元格的任何子视图上设置不透明的backgroundColor,则当单元格突出显示或选中时的外观可能会受到影响。解决子视图问题的最简单方法是确保将其backgroundColor设置为nil或clear,并且其opaque属性为false。但是,如果需要,您可以覆盖setHighlighted(:animated :)和setSelected(:animated :)方法,以便在移入或移出突出显示和选定状态时手动更改子视图上的这些属性。>
我的快速测试确认这是您的情况的原因。
带有绿色背景标签的单元格,橙色视图为.selectedBackgroundView
。
iOS 12:
iOS 13:
答案 1 :(得分:1)
我遇到了同样的问题,我的解决方法是:
TableViewController:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "testCell")! as! TestCell
// Turn off selection style for iOS12, iOS11, etc...
cell.selectionStyle = .none
return cell
}
单元格类(我在单元格的ContentView中有一个UIView):
class TestCell: UITableViewCell {
@IBOutlet weak var testCellBackgroundView: UIView!
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
if selected {
contentView.backgroundColor = UIColor.white
testCellBackgroundView.backgroundColor = UIColor.red
} else {
contentView.backgroundColor = UIColor.white
testCellBackgroundView.backgroundColor = UIColor.green // default background color
}
}
// You may change highlighted color of a cell the same way
override func setHighlighted(_ highlighted: Bool, animated: Bool) {
super.setHighlighted(highlighted, animated: animated)
if highlighted {
contentView.backgroundColor = UIColor.white
testCellBackgroundView.backgroundColor = UIColor.red
} else {
contentView.backgroundColor = UIColor.white
testCellBackgroundView.backgroundColor = UIColor.green
}
}
}
注意:这是我在stackoverflow上的第一个答案,请检查是否正确。
答案 2 :(得分:0)
如果使用层次结构调试器,则会看到在iOS 13中contentView
位于backgroundView
和selectedBackgroundView
上方。
可以通过设置
来解决contentView.backgroundColor = nil
在awakeFromNib
或设置contentView
的{{1}}以在情节提要中清除