ViewForHeaderInSection代码仅适用于标头出列

时间:2014-02-18 12:08:38

标签: ios uitableview

我有自定义的tableView标题,但是我指定标题文本颜色和分隔符行的代码仅在标题出列时,当我将它们从屏幕上滚动时才起作用。只有这样他们才会返回白色文字颜色和可见分隔符。我的代码有什么问题,标题在第一次加载时没有以正确的状态返回?

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
    if (section == 0) {
        return @"FIRST HEADER";
    } else if (section == 1) {
        return @"SECOND HEADER";
    } else {
        return @"THIRD HEADER";
    }
}

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{    
    UITableViewHeaderFooterView *myHeaderView = [tableView dequeueReusableHeaderFooterViewWithIdentifier:@"header"];

    if (!myHeaderView) {

        myHeaderView = [[UITableViewHeaderFooterView alloc] initWithReuseIdentifier:@"header"];
    }
    myHeaderView.textLabel.textColor = [UIColor whiteColor];

    CGFloat leftMargin = 0.0;
    CGFloat lineWidth = 1.0;

    UIView *separatorLine = [[UIView alloc] initWithFrame:CGRectMake(leftMargin, myHeaderView.frame.size.height - lineWidth, myHeaderView.frame.size.width - leftMargin, lineWidth)];
    separatorLine.backgroundColor = [UIColor whiteColor];

    [myHeaderView addSubview:separatorLine];

    return myHeaderView;
}

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    return 20.0;
}

- (void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section {
    if ([view isMemberOfClass:[UITableViewHeaderFooterView class]]) {

        ((UITableViewHeaderFooterView *)view).backgroundView.backgroundColor = [UIColor clearColor];
    }
}

1 个答案:

答案 0 :(得分:1)

原因是你的标题框架在出列前等于CGRectZero。这意味着,该标题将在未来调整大小,您需要将适当的自动调整掩码设置为分隔符。然后,分隔符也将调整大小。

UIView *separatorLine = [[UIView alloc] initWithFrame:CGRectMake(leftMargin, 0, 0, lineWidth)];
separatorLine.backgroundColor = [UIColor redColor];
separatorLine.autoresizingMask = UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleWidth;

[header.contentView addSubview:separatorLine];