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

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

任何帮助将不胜感激!

【问题讨论】:

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

标签: objective-c iphone uitableview


【解决方案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 的分隔线

      【讨论】:

        猜你喜欢
        • 2017-03-19
        • 1970-01-01
        • 2010-11-29
        • 2018-02-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-11
        • 1970-01-01
        相关资源
        最近更新 更多