2

我有一个 UITableView 配置为“UITableViewStylePlain”,其分隔符样式为 UITableViewCellSeparatorStyleSingleLine。单元格具有背景颜色。

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

这些单元格已注册:

[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。

4

7 回答 7

12

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

也许您应该检查一下是否忘记在其他方法中调用 super 。

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

    //own code continues here
}
于 2012-11-15T21:54:59.953 回答
1

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

于 2013-10-12T02:11:23.680 回答
1

通过将分隔符插入值设置为 0,我的问题也得到了解决。

于 2013-12-03T07:01:53.200 回答
1

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

contentView.addSubview(subView)

代替

self.addSubview(subView)

于 2019-08-10T22:33:48.653 回答
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
}
于 2018-08-27T07:10:07.920 回答
0

如果它对您来说很烦人,那么制作一个自定义单元格并将分隔符放入其中,并通过 For Obj.C 从单元格中删除默认分隔符: [self.tableView setSeparatorStyle:UITableViewCellSeparatorStyleNone];

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

于 2018-01-23T13:05:48.843 回答
0

它与LED屏幕分辨率有关,由于实际设备的分辨率非常高,显示器很难在屏幕上渲染那些微小的线条。它可以在实际设备上正常工作。有人告诉我不要在意它。所以如果问题只出在模拟器上,你就可以了。

于 2017-12-28T05:05:13.210 回答