以编程方式设置UITableView的背景颜色不起作用

时间:2017-10-05 19:51:59

标签: ios swift uitableview uiview

我使用故事板添加了一个UIView并对其进行了子类化。在此视图中,我以编程方式添加UITableView。以下是创建tableview并添加它的代码:

private func commonInit() {
    self.backgroundColor = .clear

    self.categoryTableView = UITableView(frame: CGRect(x: 0, y: 0, width: self.frame.width, height: self.frame.height))

    categoryTableView?.delegate = self
    categoryTableView?.dataSource = self

    self.categoryTableView?.backgroundView = nil
    self.categoryTableView?.backgroundColor = .yellow

    self.categoryTableView?.isScrollEnabled = false
    self.categoryTableView?.allowsMultipleSelection = true

    self.addSubview(categoryTableView!)
}

这就是它的样子。我期待tableview的背景为黄色(截图中为白色)

我还设置了单元格背景颜色以清除哪个似乎正在工作。当我查看UI层次结构时,很明显White正来自tableview。

我觉得这应该是真正的前进。奇怪的部分是线条self.categoryTableView?.isScrollEnabled = falseself.categoryTableView?.allowsMultipleSelection = true似乎都在起作用,但背景颜色变化不是。

2 个答案:

答案 0 :(得分:0)

我在操场上测试了这个,结果是预期的。

import UIKit
import XCTest
import PlaygroundSupport


let view = UIView(frame: CGRect(x: 0, y: 0, width: 500, height: 500))
PlaygroundPage.current.liveView = view

view.backgroundColor = UIColor.blue

let tableView = UITableView(frame:CGRect(x: 0, y: 0, width: view.frame.width, height: view.frame.height))
tableView.backgroundColor = UIColor.yellow
view.addSubview(tableView)

结果:

colored tableview

我的猜测是在这里正在发生的事情。也许是框架大小的调整,或者调用commonInit()方法的地方?

答案 1 :(得分:0)

我遇到了完全相同的问题,发现在tableView.backgroundColor之后更改tableView.backgroundView = nil无效。

我的案例也是在UITableView内以编程方式创建的UIView

解决方案是将backgroundView添加到tableView并更改backgroundColor对象的属性backgroundView


Swift 5 / iOS 12.x

更改表格视图背景颜色

对于.clear以外的其他任何颜色,上述方法均适用:

    self.tableView.backgroundView = UIView() //Create a backgroundView
    self.tableView.backgroundView!.backgroundColor = .lightGray //choose your background color

更改tableViewCells背景颜色

再进一步,由于UITableViewCell实例的背景色,有些人可能发现tableView背景色未按预期显示。确保单元格具有透明背景的简单解决方案:

func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
        cell.contentView.backgroundColor = UIColor.clear
        cell.backgroundColor = .clear
    }