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

时间:2016-05-06 13:14:24

标签: ios swift uitableview ios9

启动iOS 9时,我无法让UITableView更改颜色。

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

myTableView.backgroundColor = UIColor.yellowColor()

但它保持白色。

我使用了View Debugging>捕获视图层次结构以确认它是表视图本身而不是白色的表视图单元格。 (但是为了以防万一,我还是将细胞设置为清除。)

我已经看过很多关于类似问题的旧帖子(例如thisthisthis以及this newer one)所以我尝试了一些东西喜欢

myTableView.backgroundView = nil // or UIView()

myTableView.backgroundView.backgroundColor = UIColor.clearColor()

但这些也没有用。

我发现如果我做了

myTableView.backgroundColor = UIColor.yellowColor()

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

这只是iOS 9.3中的一个问题。在iOS 8.1和8.4的测试中,我在init期间设置背景颜色没有问题。

还有什么可以尝试吗?

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

尝试将layoutSubviews didMoveToWindow用于UIView子类:

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

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

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

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

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

答案 2 :(得分:0)

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

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

无论系统中将背景设置为白色的是什么,现在都会被设置回来。