在iOS 13上构建时,UITableViewCell selectedBackgroundView的颜色不可见

Sam*_*uël 5 uitableview ios13 xcode11

我在cellForRowAtIndexPath使用中为tableview单元格选择了颜色

    let backgroundView = UIView()
    backgroundView.backgroundColor = UIColor.grey3 //custom color
    cell.selectedBackgroundView = backgroundView
Run Code Online (Sandbox Code Playgroud)

由于我使用Xcode 11.0构建,因此颜色不再在iOS 13设备或模拟器上传播到单元的子视图。如果我使用Xcode 11.0在iOS 12.2模拟器上构建,它仍然可以工作。

任何人都知道导致此行为的更改是什么?我正在使用.xib文件。

Don*_*Mag 8

来自 Apple 的iOS 13 发行说明

当单元格被突出显示或被选中时,UITableViewCell 类不再更改 contentView 及其任何子视图的 backgroundColor 或 isOpaque 属性。如果您在 contentView 内部(并包括)单元格的任何子视图上设置不透明的 backgroundColor,则单元格突出显示或被选中时的外观可能会受到影响。解决子视图任何问题的最简单方法是确保它们的 backgroundColor 设置为 nil 或 clear,并且它们的 opaque 属性设置为 false。但是,如果需要,您可以覆盖 setHighlighted( :animated:) 和 setSelected( :animated:) 方法,以便在移入或移出突出显示和选定状态时手动更改子视图上的这些属性。

我的快速测试确认这将是您的情况的原因。

带有绿色背景标签的单元格,橙色视图为.selectedBackgroundView

iOS 12:

在此处输入图片说明

iOS 13:

在此处输入图片说明


Ash*_*lls 5

如果您使用层次结构调试器,您会看到在 iOS 13 中contentView位于backgroundView和之上selectedBackgroundView

这可以通过设置解决

contentView.backgroundColor = nil 
Run Code Online (Sandbox Code Playgroud)

awakeFromNib

或在情节提要中将contentView's设置backgroundColour为 clear