iOS14适配UITableViewHeaderFooterView的背景颜色

一、

iOS14之后修改backgroundView的背景颜色发现并没有效果,经过多次尝试,发现如果去修改contentView的背景颜色的话是可以的,在willDisplayHeaderView代理方法中添加一下代码即可:

headerView.contentView.backgroundColor = [UIColor clearColor]; //iOS14.0之后添加改代码

二、

给UITableViewHeaderFooterView设置背景色分2种情况

1.tableView在group模式下,UITableViewHeaderFooterView的背景色默认是透明的,此时如果要设置背景色只需要给contentView设置颜色即可

self.contentView.backgroundColor = [UIColor clearColor];

2.tableView在plain模式下,这个时候UITableViewHeaderFooterView默认有个浅灰色背景,如果要让背景色为clearColor,就不能直接设置self 和 self.contentView的颜色,经过测试发现,这样设置是不会生效的,正确的方式可以通过下面方法来实现

-(void)tableView:(UITableView*)tableView willDisplayHeaderView:(UIView*)view forSection:(NSInteger)section {

    if([view isMemberOfClass:[UITableViewHeaderFooterViewclass]]) {       

        UITableViewHeaderFooterView *headerView = (UITableViewHeaderFooterView *)view;            headerView.backgroundView.backgroundColor = [UIColor clearColor];            headerView.contentView.backgroundColor = [UIColor clearColor]; //iOS14.0之后添加改代码

    }

}

或者:

headerView.backgroudView = [UIView new]

在 iOS14 bate 中,UITableViewCell 中如果有直接添加在 cell 上的控件,也就是使用[self addSubview:]方式添加的控件,会显示在 contentView 的下层,UITableViewHeaderFooterView也应该是这样子的。contentView 会阻挡事件交互,使所有事件都响应tableView:didSelectRowAtIndexPath:方法,如果 customView 存在交互事件将无法响应。如果 contentView 设置了背景色,还会影响界面显示。

三、

UITableViewHeaderFooterView设置背景色的时候,设置如果alpha不等于0的情况下,plain模式下,当头部悬停的时候,它的背景会是透明的。如果不要这种效果的话,设置backgroundColor的时候UIcolor最好不要带透明度,以下两种情况,背景都是带透明的

1、bgView.backgroundColor = UIColor.white.withAlphaComponent(0.45) 

2、UIImage.fromColor(UIColor.white.withAlphaComponent(0.45))

你可能感兴趣的:(iOS14适配UITableViewHeaderFooterView的背景颜色)