在 UITableViewController 中将 UIView 放在 UITableView 前面

Posted

技术标签:

【中文标题】在 UITableViewController 中将 UIView 放在 UITableView 前面【英文标题】:Putting a UIView in front of UITableView in a UITableViewController 【发布时间】:2014-11-08 16:55:53 【问题描述】:

我试图在我的 UITableViewController 中的 UITableView 前面放置一个 UIView。 UIView 最初设置为隐藏。我这样做是为了如果数据源中没有项目......然后显示 UIView 并说“抱歉没有项目”......当没有项目时这有效。但是,UITableViewController 一次显示 6 个项目,每当少于 6 个项目(但多于 0)时,它会让用户向下滚动,如果向下滚动足够多,就会显示我的 UIView。我怎样才能防止这种情况发生?我认为我的代码仅适用于每个页面,而不适用于整个视图控制器,但不确定如何修复它。奇怪的是没有启用分页。

【问题讨论】:

您需要发布您的代码。您如何将UIView 添加到视图层次结构中?它如何确定它的布局?你如何显示/隐藏它?如果它是 UIScrollView 的孩子,它会滚动。 【参考方案1】:

每当我需要做这样的事情时,我都会选择 2 个选项之一:

    使用添加了UITableView 的常规UIViewController。这样,您可以将UIView(或者可能是UILabel)添加到UIViewControllerview。然后,当您没有要显示的项目时,您可以将UITableViewalpha 设置为零,并且可以看到标签。 创建一个原型UITableViewCell,显示您希望用户看到的“No Items”消息。

【讨论】:

【参考方案2】:

我的一个应用程序正是成功地做到了这一点。 UIView 需要是 UITableView 的对等点(即在同一个父视图中)并且在它的前面(在父视图列表中它之后)。

您的故事板应如下所示:

Scene
  ViewController
    Top Layout Guide
    Bottom Layout Guide
    View
      Table View
      View  // the view which covers the table view.

使用约束使表格相对于其父视图具有固定大小,并使封面视图与表格大小相同并与之对齐,因此它始终在可见时覆盖它。

听起来您不小心将封面视图放在桌子内或桌子后面或其他什么地方。

【讨论】:

太棒了。我的工作印象是列表中的第一个视图在前面。情况恰恰相反。谢谢!【参考方案3】:

如果您使用的是 UITableView 控制器,则专门找到了一个解决方案。如果您的数据集为空,请使用此代码:[self.tableView setSeparatorInset:UIEdgeInsetsZero];。这消除了空行的外观并使您的 UITableView 看起来像一个空的 UIView。然后,只需自定义您的视图以使其成为您想要的样子。对于我的应用,我向 UITableView(如果数据集为空)添加了一个标签作为子视图,给出了“无项目”消息。

【讨论】:

以上是关于在 UITableViewController 中将 UIView 放在 UITableView 前面的主要内容,如果未能解决你的问题,请参考以下文章

在导航栏中使用 UITableViewController

在 UINavigationController 中显示 UITableViewController

在 UIPopoverController 中显示 UItableViewController

在 UITableViewController 中没有调用 viewWillAppear?

如何在 UITableViewController 中显示 MSMutableArray 数据?

没有在 UITableViewController 中调用 DidSelectRowAt