UITableView Separator行被添加到节标题视图中,该怎么办?

时间:2014-03-20 17:42:10

标签: ios uitableview sections

我有一个包含两个部分的表视图,没有疯狂的代码,只有我的委托方法。 它工作得很好,就像我希望它工作。它应该看起来像这个截图:

enter image description here

现在问题是:有时在滚动或轻弹scoll视图到边界时,会发生这种情况(如果你看不到它:第二部分顶部有1或1/2像素的灰色)标题,不打算如此):

enter image description here

那么,这是一个iOS 7.1或7.x错误吗?我没有使用标头的自定义视图。有谁知道如何解决这个问题?

反馈真的很感激。

4 个答案:

答案 0 :(得分:2)

我有同样的问题,我争了几个星期,我解决它的方法是将tableView的separatorStyle设置为UITableViewCellSeparatorStyleNone,并添加一个自定义子视图,该子视图是一行到单元格' s contentView。

然后在您的cellForRowAtIndexPath方法中,隐藏该部分中最后一个单元格的行子视图:

- (UIView *)lineView
{
    // Your frame will vary.
    UIView *colorLineView = [[UIView alloc]initWithFrame:CGRectMake(82, 67.5, 238, 0.5)];
    colorLineView.backgroundColor = [UIColor blackColor];
    return colorLineView;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell;
    static NSString *identifier = @"cellIdentifier";
    UIView *lineView = [self lineView];

    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;

    if (cell == nil)
    {
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
        cell.selectionStyle = UITableViewCellSelectionStyleDefault;

        [cell.contentView addSubview:lineView];
    }

    if (indexPath.section == 0)
    {   
        if (indexPath.row == keys.count -1)
        {
            lineView.hidden = YES;
        }
    }
    return cell;
}

答案 1 :(得分:0)

它可能会使用滚动条中的分隔符循环其中一个单元格视图。这是一个很长的镜头,但如果您尝试通过返回空视图来尝试调整该部分的页脚视图呢?

-(UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
return [[UIView alloc] init];
}

当你只有几行时,这也是从表中删除空单元格的好方法。

答案 2 :(得分:0)

我尝试了多种不同的东西,我找到的最干净的方法就是这个。 我为标题创建了一个自定义视图,但希望它看起来与原始未修改的标题相同:

-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, tableView.frame.size.width, 34)];
    [headerView setBackgroundColor:[UIColor groupTableViewBackgroundColor]];

    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(15, 0, tableView.frame.size.width, 34)];
    [label setFont:[UIFont boldSystemFontOfSize:14]];

    if (section == 0) {
        NSMutableArray *difficultyArray = [dictionary objectForKey:@"Difficulty"];
        NSString *difficulty = [difficultyArray objectAtIndex:0];
        [label setText:[NSString stringWithFormat:@"Time Challenge (%@)", difficulty]];
    } else {
        [label setText:@"Freeplay (5x5 board)"];
    }

    [headerView addSubview:label];

    return headerView;
}

现在我们得到了没有自定义标题视图的部分,但错误仍然存​​在。我简单明了:

UIView *lineFix = [[UIView alloc] initWithFrame:CGRectMake(0, 77.5, self.tableView.frame.size.width, 0.5)];
lineFix.backgroundColor = [UIColor groupTableViewBackgroundColor];
[self.tableView addSubview:lineFix];

现在我们设置一个高度为0.5像素的有缺陷的分离器的视图,分离器不再可见。在两个部分标题之间现在是0.5高度视图,不应该存在,但因为我设置它与部分背景颜色相同的颜色,它是不明显的。视图移动,因为它是tableview的子视图,与tableview相同。

如果您有任何疑问,请添加评论。

答案 3 :(得分:0)

这是一个非常古老的问题,但正确的解决方案是在viewForHeader方法中创建您自己的自定义标头并设置headerView.clipsToBounds = true