如何在 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 行的 UICollectionViewCell 中显示 Json Array 数据?