iOS:覆盖UIAppearance appearanceWhenContainedInInstancesOfClasses

时间:2017-02-16 20:25:48

标签: ios swift uitableview uiview uiappearance

我应用了一个全局主题,可以更改UITableViewHeaderFooterView的背景颜色。以下是代码:

[[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仍然显示为浅灰色背景。关于如何覆盖它的任何想法?

2 个答案:

答案 0 :(得分:3)

您可以创建UITableViewHeaderFooterView的子类 - 说WhiteUITableViewHeaderFooterView并为正确的标头配置它。

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

中的视图设置外观

答案 1 :(得分:0)

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