能否以编程方式将情节提要中的颜色设置更改为xcsets目录中的颜色

人气:234 发布:2022-10-16 标签: colors xcode swift uicolor xcasset

问题描述

当我将情节提要中某些属性的颜色(例如UILabeltextColor)设置为在xcsets目录中创建为新颜色集的颜色时

这样我就不能在第一次尝试时以编程方式更改此颜色:

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

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

黑客攻击: 我可以通过在情节提要中将此颜色设置为从颜色选择器中拾取的任何其他颜色来解决此问题,但我想知道为什么会发生这种情况。

那么,为什么会发生这种情况?

推荐答案

当从Storyboard/Xib加载UIViewsubClassLikeUITableViewCell时,它会将Attribute Inspector中指定的属性应用于所有subViews。我们有以下回调方法来了解视图何时从Storyboard/Xib

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

override func awakeFromNib() {
    super.awakeFromNib()
}
这些方法可以很好地添加/删除子视图,但它们不应该更新子视图的size或某些attribute inspector相关属性。建议的更新子视图的方法是在超级视图完成加载和应用所有attribute inspector属性并调用layoutSubviews时。因此,您应该对子视图应用任何表面上的更改。例如,

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")
}

1,000