UITableView分隔符样式问题

6

我有一个默认为空的表视图。用户可以向其中添加单元格。

当没有单元格时,我希望分隔线是透明的;当有单元格时,分隔线为灰色。

我正在使用以下代码:

if ([[self.fetchedResultsController fetchedObjects] count] == 0)
{
    self.routineTableView.separatorStyle = UITableViewCellSeparatorStyleNone;
    self.routineTableView.separatorColor = [UIColor clearColor];
}
else
{
    self.routineTableView.separatorColor = [UIColor grayColor];
}

问题是,当我以空表格启动应用程序并添加单元格时,灰色线条在重启应用程序之前并不存在。但是如果我从有单元格的表格开始,然后删除它们,再重新添加它们,那么这些线条就会出现。你有什么建议吗?


这段代码在哪里被调用?它在单元格添加之前被调用吗? - PengOne
它被调用在 viewDidLoad 中。 - user594161
当您使用空表启动应用程序时,会触发哪种情况? - PengOne
if ([[self.fetchedResultsController fetchedObjects] count] == 0) - user594161
3个回答

13

也许你忽略了这个?

...
else
{
    self.routineTableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine; // or you have the previous 'None' style...
    self.routineTableView.separatorColor = [UIColor grayColor];
}

编辑:根据 Apple 文档,你需要这个属性,但不仅仅是这个... :

此属性的值是 UITableViewCell 类参考文献中描述的分隔符样式常量之一。UITableView 使用此属性在从 tableView:cellForRowAtIndexPath: 代理返回的单元格上设置分隔符样式。

这意味着对于已经加载的单元格,样式不会改变。只需滚动表格以强制单元格重新绘制即可出现分隔线...

接下来你需要:

  1. 在插入单元格之前设置它;

    或者

  2. 当添加第一个单元格时重新加载 tableView

如果使用 NSFetchedResultsController,这并不容易做到,你应该查找其 代理 来解决问题... 或者改变方向,比如隐藏 tableView 直到有结果为止...


编辑 2:你也可以简单地添加以下内容:

[self.tableView reloadData];

但这只是一种肮脏的解决方案,它将重新加载整个tableView,失去了NSFetchedResultsController的大部分好处...


我编辑了我的回答并附上了解释...还有一个应该能用的不太正规的解决方法 :) - Vincent Guerci
不幸的是 [self.routineTableView reloadData]; 也没有起作用。 - user594161
你是否已经设置了 separatorStyle = UITableViewCellSeparatorStyleSingleLine?你的代码在哪个方法中? - Vincent Guerci
我已经按照你的建议添加了。如果获取为空,也许我可以隐藏tableview?你知道怎么做吗? - user594161
无论如何,我认为最好的解决方案是隐藏分隔符,你可以使用self.routineTableView.hidden = YES; 或者在其上添加一个空的UIView... - Vincent Guerci

1
通常我做的一个快速修复是:

(保留HTML格式)。
#pragma mark - UITableViewDelegate

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {

    if ([tableView respondsToSelector:@selector(setSeparatorStyle:)]) {
        [tableView setSeparatorStyle:UITableViewCellSeparatorStyleNone];
    }
}

1
这将更改是否存在分隔符的布尔标志。将其放置在viewDidLoad中:
self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;

为了确保您真正将其消除,请将seperatorColor属性设置为视图和单元格的背景颜色:

// If the background is white
self.tableView.separatorColor = [UIColor whiteColor];

因此,即使一些情况下上述代码未被调用且分隔符仍然存在 - 它的颜色将与其背景颜色相同,因此是不可见的。

祝好运。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接