我正在使用可能有点奇特的方式来初始化我的 UI 组件。我以编程方式创建它们,其中有一个 UITableView 实例,我在初始化时立即设置其背景颜色,如下所示:
class MyViewController: UIViewController {
...
let tableView = UITableView().tap {
$0.backgroundColor = .black
$0.separatorStyle = .none
}
...
}
where tap
是扩展函数:
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
隐藏滚动指示器)。
也许你们中的一些人可以让我知道问题的核心是什么。
Here's 完整代码 https://gist.github.com/dkarbayev/80583019503e37c2e8cb83e601d84001,要重现该问题,只需创建一个新项目并替换 ViewController.swift 的内容。如你看到的,table
有正确的rowHeight
(160) 但重置其背景颜色。
至于“视图出现之前”的声明:我已经打印了表格的背景颜色viewDidLoad
, viewWillAppear
and viewDidAppear
像这样:
print(#function, table.backgroundColor.debugDescription)
– 它仅在最后一次调试打印中更改其颜色:
viewDidLoad() Optional(UIExtendedGrayColorSpace 0 1)
viewWillAppear Optional(UIExtendedGrayColorSpace 0 1)
viewDidAppear Optional(UIExtendedSRGBColorSpace 1 1 1 1)