swift - 无法以编程方式将 Storyboard 中的颜色集更改为 xcassets 目录中的颜色

标签 swift xcode colors uicolor xcasset

当我将 Storyboard 中某些属性的颜色(例如 UILabeltextColor)设置为在 xcassets 目录中创建为新颜色集的颜色时

enter image description here

然后我无法在第一次尝试时以编程方式更改此颜色:

label.textColor = UIColor(named: "HighlightedGreen")

...请注意,我是从数据源方法 cellForItemAt 中调用它的。

破解: 我可以通过在 Storyboard 中为从颜色选择器中选择的任何其他颜色设置这种颜色来解决这个问题,但我想知道为什么会这样。

那么,为什么会这样呢?

最佳答案

UIView subClassUITableViewCellStoryboard/Xib 加载时,它应用指定的属性在 Attribute Inspector 中添加到所有 subViews。我们有以下回调方法来了解何时从 Storyboard/Xib 加载 View ,

override func prepareForInterfaceBuilder() {
    super.prepareForInterfaceBuilder()        
}

override func awakeFromNib() {
    super.awakeFromNib()
}

这些方法可能是添加/删除 subview 的良好候选者,但它们不应该更新 subview 的 size 或一些 attribute inspector 相关属性。更新 subview 的推荐方法是当 super View 完成加载并应用所有 attribute inspector 属性并调用 layoutSubviews 时。因此,您应该对 subview 应用任何外观更改。例如,

override func layoutSubviews() {
    super.layoutSubviews()

    label.textColor = UIColor(named: "HighlightedGreen")
}

对于 UITableViewCell,任何实现 UITableViewDataSource 的对象还保证 delegate 方法在单元格显示之前应用任何修饰更改,如下所示, 所以这也是另一个改变颜色的好候选。

func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
    (cell as! MyListTableViewCell).label.textColor = UIColor(named: "HighlightedGreen")
}

关于swift - 无法以编程方式将 Storyboard 中的颜色集更改为 xcassets 目录中的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54653348/

相关文章:

ios - 从 View Controller Xcode 传回数据

ios - 通过删除和添加字母对 UILabel 产生选取框效果 - Swift 3

algorithm - 缩放和减少颜色以减小扫描文件的大小

c# - 更新 GeometryModel3D Material 的单点颜色而不是整个点系统

swift - 快速显示进度 View

ios - 立即调用 Pan Gesture 完成处理程序

ios - 如果生成报告后测试失败,如何让 jenkins 使构建失败?

css - Internet Explorer 10 - CSS3 转换不工作

swift - 如何一次运行多个 NSRegularExpression

objective-c - 处理网络连接的正确方法是什么?