如何以编程方式在 UITableView 上添加 UIView

Posted

技术标签:

【中文标题】如何以编程方式在 UITableView 上添加 UIView【英文标题】:How to add UIView over UITableView programmatically 【发布时间】:2014-06-16 20:50:27 【问题描述】:

我想在 tableViewController 类和 NavigationBar 下的表格视图上添加一个 UIView。如果我这样添加:

[self.view addSubview:self.manualView];

它位于 UITableView 上方(实际上我想让它们在同一个 z-index 上)。当用户按下某个按钮时,我还想以编程方式删除 UIView。

【问题讨论】:

由于 ios 处理视图层次结构的方式,没有两个视图可以在完全相同的 z-index 上(顶部的视图本质上是未定义的)。你想让你的视图和表格视图垂直堆叠吗?在这种情况下,您可能正在寻找 tableview 标题。 是的,我想垂直堆叠它们。如果我在 Storyboard 中添加 UIView,则可以将视图放在 UITableView 上,但是如果我以编程方式删除 UIView,则 UIView 的空间仍然存在。 【参考方案1】:

UITableViewController's 视图是UITableView,因此向其添加子视图可能不是您要找的。我认为最好的解决方案是改用UIViewController。如果你给它一个覆盖整个 (UIView) 视图的 tableView,它的行为就像 UITableViewController 一样。

那么您使用addSubview(和@Literphor 建议的removeSubview)的代码就可以正常工作了。

只要您在添加表格视图后添加视图,堆叠就会自行处理。

【讨论】:

这个答案应该有更多的赞成票。像@danh 所说的那样,最灵活的做法是使用UIViewControllerUITableView 作为子视图。【参考方案2】:

有两种方法可以解决这个问题。 天真(创建您的视图并将其添加到子视图):

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
view.backgroundColor = [UIColor blackColor];
[self.view addSubview:view];

这引入了一大堆与布局放置和空间冲突相关的问题。

更好的解决方案: 通过以下方式返回表格相应部分的页眉视图或页脚视图:

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section

该方法是 UITableViewDelegate 协议的一部分,UITableViewController 默认遵循该协议。

【讨论】:

【参考方案3】:

您可以使用[self.view removeSubview:self.manualView]; 来响应用户按下按钮。您不能让两个视图具有相同的 Z-index,但您可以通过参考 Apple 的 UIView Documentation

管理视图层次结构部分来更改视图的深度

【讨论】:

以上是关于如何以编程方式在 UITableView 上添加 UIView的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式在 UITableView 后面添加静态背景?

如何在 Swift 3 中以编程方式在 UIImageview 中添加 UITableview

如何以编程方式设置 UITableView 的高度

如何以编程方式添加到 NSMutableArray 并将其显示在 uitableviewcells 上?

如何以编程方式将 UITableView 样式从普通转换为组 [重复]

如何初始化 UITableView?来自 XIB 和以编程方式?