如何以编程方式在 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 所说的那样,最灵活的做法是使用UIViewController
和UITableView
作为子视图。【参考方案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
如何以编程方式添加到 NSMutableArray 并将其显示在 uitableviewcells 上?