iOS:覆盖UIA外观appearanceWhenContainedInInstancesOfClasses

问题描述:

我应用了一个全局主题,用于更改UITableViewHeaderFooterView的背景颜色。以下是代码:iOS:覆盖UIA外观appearanceWhenContainedInInstancesOfClasses

[[UIView appearanceWhenContainedInInstancesOfClasses:@[[UITableViewHeaderFooterView class]]] setBackgroundColor:[UIColor lightGray]]; 

在一个屏幕上有一个实例,我希望覆盖此颜色并将颜色更改为白色。我试过以下代码:

override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { 

    let headerView = tableView.dequeueReusableHeaderFooterView(withIdentifier: "HeaderView") as? HeaderView 

    headerView.contentView.backgroundColor = UIColor.white 
    headerView.backgroundColor = UIColor.white 

    return headerView 
} 

但是,headerView仍然显示为浅灰色背景。有关如何覆盖它的任何想法?

+0

你有没有试过出队的HeaderFooterView和刚刚创建一个新的外观上? – ystack

您可以制作UITableViewHeaderFooterView的子类 - 说WhiteUITableViewHeaderFooterView并将其配置为正确的标题。

然后,您可以设置意见该类[[UIView appearanceWhenContainedInInstancesOfClasses:@[[WhiteUITableViewHeaderFooterView class]]] setBackgroundColor:[UIColor white]];

如何改变HeaderView类中的背景颜色,如LayoutSubviews()这样的方法?你可以让这个类的property表示这是改变背景颜色的正确视图。不知道这是否是实现这一目标的最佳方法,但应该是一种解决方法。