滚动后,UITableView的单元格分隔符消失

时间:2012-10-31 20:13:48

标签: ios uitableview

我将UITableView配置为'UITableViewStylePlain',其UITableViewCellSeparatorStyleSingleLine用于其分隔符样式。细胞具有背景颜色。

问题是当您滚动桌面视图时,一旦某些单元格从屏幕上消失并被带回,分隔符将不再可见。

细胞注册时:

[tableView registerNib:nib forCellReuseIdentifier:cellIdentifier];

单元格代码:

- (void)customizeMyTable
{
    [self.tableView setDataSource:self];
    [self.tableView setDelegate:self];
    self.tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;

    NSString *cellIdentifier = [MyTableViewCell cellIdentifier];
    UINib *nib = [UINib nibWithNibName:cellIdentifier bundle:nil];

    [self.tableView registerNib:nib forCellReuseIdentifier:cellIdentifier];
    self.tableView.rowHeight = 50;
}

- (UITableViewCell *)tableView:(UITableView *)aTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    MyTableViewCell *cell = (MyTableViewCell*)[tableView dequeueReusableCellWithIdentifier:cellID];

    [cell configure:someDataForThisRow];

    return cell;
}

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    cell.backgroundColor = [UIColor lightGrayColor];
}

有人遇到过这个问题吗?这似乎只发生在iOS 5上,而不是iOS 6 Tableviews上。

7 个答案:

答案 0 :(得分:12)

如果您在自定义单元格中实施了 layoutSubviews ,并且您不小心忘记调用相应的超级方法,则您将看不到分隔线。

也许你应该检查一下你是否忘记用其他方法打电话给超级。

- (void)layoutSubviews
{
    [super layoutSubviews]; //<-THIS LINE YOU NEED

    //own code continues here
}

答案 1 :(得分:1)

我必须将分隔符insets设置为0才能解决问题。

答案 2 :(得分:1)

我的问题也通过设置分隔符插入值0来解决。

答案 3 :(得分:0)

它与LED屏幕分辨率有关,因为实际设备具有非常高的分辨率,显示器很难在屏幕上呈现那些微小的线条。它可以在实际设备上正常工作。 有人告诉我不要关心它。如果问题只出现在模拟器上,那么你很好。

答案 4 :(得分:0)

如果它让你讨厌,那么制作一个自定义单元格并在其中添加一个分隔符,并从单元格中删除默认分隔符 对于Obj.C: [self.tableView setSeparatorStyle:UITableViewCellSeparatorStyleNone];

否则,当您在真实设备上进行测试时,您应该没问题。

答案 5 :(得分:0)

我在swif中有同样的问题。就我而言,我发现通过单击“按视图层次结构调试”按钮,滚动时新出现的单元格与其他单元格有点重叠。这就是分隔线消失的原因。 因此,解决方案非常简单,请在cellForRowAtIndexPath clipsToBounds = true中设置单元格返回,这样它就不会超出您分配的高度并与其他单元格的分隔线重叠。

public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cellView = tableView.dequeueReusableCell(withIdentifier: cellReuseId, for: indexPath)
    cellView.clipsToBounds = true //Add this line
    return cellView
}

答案 6 :(得分:0)

如果您动态构建UITableViewCell的内容,请确保将子视图添加到contentView而不是自身:

contentView.addSubview(subView)

代替

self.addSubview(subView)