【问题标题】:TableView Seperator line gets added to the section header view, what to do?UITableView 分隔线被添加到部分标题视图中,该怎么办?
【发布时间】:2014-03-20 17:42:10
【问题描述】:

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

现在的问题是:有时在将 scoll 视图滚动或滑动到边界时,会发生这种情况(如果您看不到它:第二节标题顶部有 1 或 1/2 像素为灰色,不是这样):

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

非常感谢您的反馈。

【问题讨论】:

  • 嗨 - 请记住,人们会根据标题来决定是否阅读您的问题,并且它不会过于描述性:) 如果您使用更具描述性的标题编辑您的问题,您可能会得到更好的回应.

标签: ios uitableview sections


【解决方案1】:

我也遇到了同样的问题,我已经解决了几个星期,我解决的方法是将 tableView 的 separatorStyle 设置为 UITableViewCellSeparatorStyleNone,并在单元格的 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;
}

【讨论】:

  • 感谢您的回答,但这不是我搜索的内容。它肯定解决了我遇到的问题,但我的目标是找到一个更干净的版本,让表格视图保持原样。
  • 它有什么不“干净”的地方?你一点意义都没有。
  • 它不干净,因为不应更改分隔符样式。看看我对我的问题的回答,你就会明白我所说的干净是什么意思。
  • 不应该按照谁?作为开发人员,我们必须解决 Apple 的缺点。你的实现实际上更糟糕。
  • 不应该按照我的说法,因为我写了这个问题,我希望它像我想要的那样得到回答,好吗?更差?从一个刚刚以肮脏的方式更换分隔器的人来说,这有点难以接受。
【解决方案2】:

它可能正在回收滚动中带有分隔符的单元格视图之一。这是一个长镜头,但是如果您要尝试通过返回一个空视图来调整该部分的页脚视图怎么办?

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

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

【讨论】:

  • 是的,添加的行确实是单元格的分隔符。但是您的解决方案不会解决任何问题,抱歉。谢谢你的回答。
  • 不用担心 - 无论如何,我认为这是一个延伸。我认为@troop231 实际上可能对您想要做的事情有正确的方法。有时,小技巧是解决细节问题的唯一方法。
  • 我用正确的方法回答了我自己的问题(没有修改分隔符)。
【解决方案3】:

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

-(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一样的方向。

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

【讨论】:

  • 可能是最干净的解决方案...任何人都应该向 Apple 提交错误报告
猜你喜欢
  • 1970-01-01
  • 2023-03-06
  • 2014-01-14
  • 1970-01-01
  • 2015-02-18
  • 1970-01-01
  • 2017-07-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多