Ios UITableView在显示视图之前正在重置其背景色

Ios UITableView在显示视图之前正在重置其背景色,ios,swift,uitableview,uikit,Ios,Swift,Uitableview,Uikit,我正在使用一种可能有点奇怪的方式初始化UI组件。我以编程方式创建它们,其中有一个UITableView实例,我在初始化时立即设置其背景色,如下所示: class MyViewController: UIViewController { ... let tableView = UITableView().tap { $0.backgroundColor = .black $0.separatorStyle = .none } ..

我正在使用一种可能有点奇怪的方式初始化UI组件。我以编程方式创建它们,其中有一个UITableView实例,我在初始化时立即设置其背景色,如下所示:

class MyViewController: UIViewController {
    ...
    let tableView = UITableView().tap {
         $0.backgroundColor = .black
         $0.separatorStyle = .none
    }
    ...
}
print(#function, table.backgroundColor.debugDescription)
其中,
点击
是扩展功能:

func tap(_ block: (Self) -> Void) -> Self {
    block(self)
    return self
}
这在我以前的项目中运行得非常好,该项目是在Xcode 8中创建的,然后迁移到Xcode 9而没有破坏任何东西。但现在我在Xcode 9中创建了一个全新的项目,并复制粘贴了上面提到的扩展,但似乎出了问题。当我的视图控制器出现在屏幕上时,表格具有白色背景和默认分隔符插入

这似乎只影响某些属性,因为其他属性按其应有的方式工作(例如,
$0.register(nib:UINib?,forCellReuseIdentifier:String)
注册所需的单元格类和
$0.showsVerticalScrollIndicator=false
隐藏滚动指示器)

也许你们中的一些人能告诉我事情的核心

现在,要重现这个问题,只需创建一个新项目并替换ViewController.swift的内容。如您所见,
具有正确的
行高
(160),但重置了其背景色

至于“视图出现之前”语句:我已经在
viewDidLoad
中打印了表的背景色,
viewwillbeen
viewdidbeen
如下所示:

class MyViewController: UIViewController {
    ...
    let tableView = UITableView().tap {
         $0.backgroundColor = .black
         $0.separatorStyle = .none
    }
    ...
}
print(#function, table.backgroundColor.debugDescription)
–它仅在上次调试打印时更改颜色:

viewDidLoad() Optional(UIExtendedGrayColorSpace 0 1)
viewWillAppear Optional(UIExtendedGrayColorSpace 0 1)
viewDidAppear Optional(UIExtendedSRGBColorSpace 1 1 1 1)

最后,我将初始化移到lazy var的函数中–结果表明,在初始化UITableView的视图控制器期间初始化UITableView会产生一些副作用。

我只是通过复制粘贴您提供给Playerd的链接中的代码来尝试此操作-颜色设置与预期一致。也许你的代码的其他部分有一些副作用?@MilanNosáľ我也在新的blank项目中测试过,它对我不起作用:(嗯,有趣的是,当我在普通项目的设备上运行它时,它也不起作用。)最奇怪的是,如果我在将tableView添加为子视图并进行布局之前在
loadView
中更改背景色,它不会重置颜色。我的意思是,这并不奇怪,但正如预期的那样。奇怪的部分是主题本身。