UITableView在视图出现之前重置其背景颜色

时间:2017-12-17 22:30:28

标签: ios swift uitableview uikit

我正在使用我的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),但会重置其背景颜色。

至于“查看之前”声明:我已在viewDidLoadviewWillAppearviewDidAppear打印了表格的背景颜色,如下所示:

print(#function, table.backgroundColor.debugDescription)

- 它仅在上一次调试打印中更改其颜色:

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

1 个答案:

答案 0 :(得分:1)

我最终将初始化移动到lazy var的函数 - 在初始化期间初始化UITableView的视图控制器有一些副作用。