以编程方式创建的 UITableView 在 iOS9 中始终为白色

Programmatically created UITableView always white in iOS9

我无法让我的 UITableView 在启动时更改颜色 iOS 9.

我在代码中创建了一个 UITableView,它是我的自定义视图的子视图,并在我的子视图的 init 方法中设置了背景颜色。

myTableView.backgroundColor = UIColor.yellowColor()

但它保持白色。

我使用 View Debugging > Capture View Hierarchy 来确认它是 table 视图本身而不是 table 视图单元格是白色的。 (但为了以防万一,我还是将单元格设置为清除)。

我看到很多旧帖子都在谈论类似的问题(比如 this, this and this and )所以我尝试了

myTableView.backgroundView = nil // or UIView()

myTableView.backgroundView.backgroundColor = UIColor.clearColor()

但这些也不起作用。

我发现如果我这样做了

myTableView.backgroundColor = UIColor.yellowColor()

在原始布局之后的某个时间(例如,点击按钮),然后它改变背景颜色。

这只是 iOS 9.3 中的一个问题。在我使用 iOS 8.1 和 8.4 进行的测试中,我在 init 期间设置背景颜色时没有遇到任何问题。

还有什么我可以尝试的吗?

看起来其他人也遇到了这个错误。作为一种解决方法,我使用了 UIImageView(具有我想要的颜色)并将其分配给 uitableview 背景。希望它也适合你!

 tableView.backgroundView = UIImageView(image: UIImage(named: "yellowColorImage"))

我不确定这是不是最佳答案,但它确实有效。我通过在 init 方法中执行此操作将颜色设置延迟到下一个 运行 循环:

dispatch_async(dispatch_get_main_queue()) {
    self.myTableView.backgroundColor = UIColor.clearColor()
}

系统中将背景设置为白色的任何内容现在都会恢复。

init 方法不是修改 UI 属性的好地方,因为尚未构建视图层次结构。

尝试对 UIView 个子类使用 layoutSubviews didMoveToWindow

var customColor = UIColor.yellowColor()
override func layoutSubviews() {
    super.layoutSubviews()
    self.backgroundColor = customColor
}

override func didMoveToWindow() {
    super.didMoveToWindow()
    self.backgroundColor = customColor
}

您还可以在 UIViewController 子类中使用 viewDidLoad awakeFromNib 方法:

override func viewDidLoad() {
    super.viewDidLoad()
    customTableView.backgroundColor = UIColor.yellowColor()
}

override func awakeFromNib() {
    super.awakeFromNib()
    customTableView.backgroundColor = UIColor.yellowColor()
}