我正在使用我的UI组件的一些异乎寻常的初始化方式。我以编程方式创建它们,其中是一个UITableView实例,我在初始化时立即设置它的背景颜色,如下所示:
class MyViewController: UIViewController {
...
let tableView = UITableView().tap {
$0.backgroundColor = .black
$0.separatorStyle = .none
}
...
}
其中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
隐藏滚动指示符。
或许你们中的一些人,可以让我知道问题的核心是什么。
这里是full code,重现问题只需创建一个新项目并替换ViewController.swift的内容。正如您所看到的,table
已更正rowHeight
(160),但会重置其背景颜色。
至于“查看之前”声明:我已在viewDidLoad
,viewWillAppear
和viewDidAppear
打印了表格的背景颜色,如下所示:
print(#function, table.backgroundColor.debugDescription)
- 它仅在上一次调试打印中更改其颜色:
viewDidLoad() Optional(UIExtendedGrayColorSpace 0 1)
viewWillAppear Optional(UIExtendedGrayColorSpace 0 1)
viewDidAppear Optional(UIExtendedSRGBColorSpace 1 1 1 1)
答案 0 :(得分:1)
我最终将初始化移动到lazy var的函数 - 在初始化期间初始化UITableView的视图控制器有一些副作用。