改变UITableView的footerView、headerView背景色正确姿势

- (void)tableView:(UITableView *)tableView willDisplayFooterView:(UIView *)view forSection:(NSInteger)section
{
    view.backgroundColor = [UIColor redColor];
}

想改变UITableView的footerView的背景色,上面是最容易的方法,但并没有用。

于是用了这个方法

- (nullable UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section{
    UIView *headerView = [UIView new];
    headerView.backgroundColor = [UIColor redColor];
    return headerView;
}

能有效。

因为我项目中

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 100;
}

有很多个section,就在以上方法中做了优化,用了重用机制

- (nullable UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section{
    static NSString *ID = @"headerViewIdentifier";
    UITableViewHeaderFooterView *footerView = [tableView dequeueReusableHeaderFooterViewWithIdentifier:ID];
    if (footerView == nil) {
        footerView = [[UITableViewHeaderFooterView alloc]initWithReuseIdentifier:ID];
    }
    [footerView.contentView setBackgroundColor:[UIColor blueColor]];
    return footerView;
}

还有一点有必要说明,如果要要控制某个section不展示headerView,下面方法是没有用的

- (nullable UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section{
    static NSString *ID = @"headerViewIdentifier";
    UITableViewHeaderFooterView *footerView = [tableView dequeueReusableHeaderFooterViewWithIdentifier:ID];
    if (footerView == nil) {
        footerView = [[UITableViewHeaderFooterView alloc]initWithReuseIdentifier:ID];
    }
    [footerView.contentView setBackgroundColor:[UIColor blueColor]];
    return footerView;
}

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{
    if (section == 0) {
        return 0;
    }
    return  10;
}

正确做法:

- (nullable UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section{
    if (section == 0) {
        return nil;
    }
    static NSString *ID = @"headerViewIdentifier";
    UITableViewHeaderFooterView *footerView = [tableView dequeueReusableHeaderFooterViewWithIdentifier:ID];
    if (footerView == nil) {
        footerView = [[UITableViewHeaderFooterView alloc]initWithReuseIdentifier:ID];
    }
    [footerView.contentView setBackgroundColor:[UIColor blueColor]];
    return footerView;
}

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{
    return  10;
}

说明- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section方法只能影响footerView的高度,不能控制foooterView是否显示(就是return 0 footerView会显示默认高度18)

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{
    return 0;
}

- (nullable UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section{
    if (self.type == FDOrderSearchViewControllerTypeSearchResult) {
        static NSString *ID = @"headerViewIdentifier";
        UITableViewHeaderFooterView *footerView = [tableView dequeueReusableHeaderFooterViewWithIdentifier:ID];
        if (footerView == nil) {
            footerView = [[UITableViewHeaderFooterView alloc]initWithReuseIdentifier:ID];
        }else{
            NSLog(@"===%f",footerView.frame.size.height);
        }
        [footerView.contentView setBackgroundColor:[UIColor blueColor]];
        return footerView;
    }
    return nil;
}
打印结果.png

你可能感兴趣的:(改变UITableView的footerView、headerView背景色正确姿势)