ios - UITableView 在 View 出现之前重置其背景颜色

标签 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 中创建了全新的项目并将上面提到的扩展复制粘贴到它,但似乎出了点问题。当我的 View Controller 出现在屏幕上时,表格具有白色背景和默认分隔符插入。

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

伙计们,也许你们中的一些人可以告诉我问题的核心是什么。

这是 full code , 要重现该问题,只需创建一个新项目并替换 ViewController.swift 的内容。如您所见,table 具有正确的 rowHeight (160),但重置了它的背景颜色。

至于“在 View 出现之前”声明:我在 viewDidLoadviewWillAppearviewDidAppear 中打印了表格的背景颜色,如下所示:

print(#function, table.backgroundColor.debugDescription)

– 它仅在最后一次调试打印时改变颜色:

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

最佳答案

我最终将初始化移到了惰性变量的函数中——事实证明在它的 View Controller 初始化期间初始化 UITableView 有一些副作用。

关于ios - UITableView 在 View 出现之前重置其背景颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47860105/

相关文章:

ios - 如何在 iOS 中检索存储信息

swift macOS - 自定义 NSCollectionViewDelegate 不会被调用

ios - 具有不同部分和行号的 TableView

ios - SimpleAuth 不返回 Instagram 响应

ios - 如何设置表格 View 单元格占据整个屏幕?

IOS - 静态 UITableViewCell - 返回当前高度

ios - 是否有 createOrUpdateAllFromJson 的 iOS 等效项?

ios - 在 Swift 中创建评论部分

ios - complateTransition 不要关闭 View swift 2

swift - 在 Firebase swift 中删除特定的子节点