如何在 UITableView 中显示零行的表格

Posted

技术标签:

【中文标题】如何在 UITableView 中显示零行的表格【英文标题】:how to display a table with zero rows in UITableView 【发布时间】:2009-09-29 07:13:32 【问题描述】:

我正在动态地将内容加载到 UITableView 中。如果有数据,表格需要显示数据。如果没有数据,表格应该显示一个普通页面。但在我的应用程序中,表格显示带有两条分隔线的普通页面。我需要删除此分隔线并显示一个纯白页面。请推荐?

任何帮助将不胜感激!

【问题讨论】:

就这么简单... [self.tableView setTableFooterView:[UIView new]]; 请注意,实际的解决方案是只需将其设置为“分组”样式表!为此,只需在此处查看 Thomas Decaux 的答案:***.com/questions/1006663/… 【参考方案1】:

如果您为页脚提供视图,则空行之间的分隔符将消失。

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 1, 1)];
myTableView.tableFooterView = view;

【讨论】:

请注意tableFooterView 是一个保留属性,所以view 应该(自动)释放。 完美运行。再简单不过了。 也只是添加,这里不需要设置frame。 myTableView.tableFooterView = [[UIView alloc] init]; 已经足够好了。 可以更简单! :) [self.tableView setTableFooterView:[UIView new]]; 另外,你为什么要让它高一个像素?如果(出于某种原因)您想以“长”方式进行操作,只需将其设为 0,0,0,0【参考方案2】:

如果你的数据源是空的,你可以检查空的情况,在表格视图的顶部添加一个占位符视图。如果它们不为空,请移除占位符视图。

【讨论】:

对我来说听起来像是一个丑陋的 hack,而丑陋的 hack 往往会破坏真正的功能。 我相信反之亦然:应该有“一些东西”来向用户解释应用程序正在按计划工作,它没有崩溃,它确实已经完成了它正在做的事情 - 最重要的是 - 这个空间是故意清空,但仅限于现在。 我不明白为什么这是一个丑陋的 hack,它只是在没有数据的情况下显示自定义视图的一种方式。自定义视图可以解释为什么没有数据以及用户如何输入数据。这是 iPhone(和 Mac)应用程序中的常见做法。【参考方案3】:

普通的UITableView 将始终显示分隔线,即使它是空的。您可能会注意到,如果您有一个只有一两行的列表,仍然有可见的分隔线。这是默认行为,除非您有确实充分的理由,否则不应被覆盖。

我猜你只看到两条分隔线,因为你的行非常高?

如果您真的需要删除分隔线,则将表格视图上的separatorStyle 属性设置为UITableViewCellSeparatorStyleNone。请注意,这将影响所有行。因此,如果您仍然想要为确实存在的行使用分隔符,那么您必须在自己的 UITableViewCell 对象中绘制这些分隔线。

【讨论】:

【参考方案4】:

可以使用@bbarnhart 解决方案将其简化为一行:

myTableView.tableFooterView = [[[UIView alloc] initWithFrame:CGRectZero] autorelease];

【讨论】:

【参考方案5】:

两步:

在 viewDidLoad 中添加这段代码

- (void)viewDidLoad

    emptyplaceholder = [[UILabel alloc] initWithFrame:CGRectMake(80, 100, 640, 100)];
    emptyplaceholder.text = NSLocalizedString(@"No shift changes...", "no shift changes");
    emptyplaceholder.alpha = 0.2;

    [self.view addSubview:emptyplaceholder];


在 controllerDidChangeContent 中添加此代码:

- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller 
    // The fetch controller has sent all current change notifications, so tell the table view to process all updates.

    if (self.fetchedResultsController.fetchedObjects.count > 0)
        emptyplaceholder.hidden = YES;
    else
        emptyplaceholder.hidden = NO;

    [self.tableView endUpdates];

所以当有日期单元格时UILable会消失,当删除到表格中没有数据时,标签会再次显示。

【讨论】:

对不起,我的模型是具有相同日期信息的 tableView 控制器。所以应该是:当表格视图具有“真实”表格视图单元格时,占位符 UILabel 将隐藏。【参考方案6】:

在没有数据“No Data available”时向 UIViewController 添加新 UIView 的良好 UI 设计,通过添加它将隐藏 UITableView 的分隔线

【讨论】:

以上是关于如何在 UITableView 中显示零行的表格的主要内容,如果未能解决你的问题,请参考以下文章

UITableView - 如何在用户滚动时保持表格行固定

如何在具有 UITableview 行的 UICollectionViewCell 中显示 Json Array 数据?

在 UITextView 中显示从 UITableView 中选择的 CoreData 值

如何在动态 uitableview 中隐藏部分及其行

UITableView 删除行减少表格行高

在 UITableView 中,如何在隐藏行后关闭行的底部边框?