我有一个UITableView和一个小的自定义视图。我希望自定义保留在导航栏下方,但在tableview上方。因此,当自定义视图上下移动时,看起来自定义视图会从导航栏的后面弹出。
首先,我将自定义视图作为tableview的子视图,一切似乎都很好。但是当滚动表视图时,自定义视图的位置也会发生变化,这不是我想要的。
然后我将导航栏设为superview,但现在自定义视图保持在导航栏上方。我不知道如何更改父视图和子视图之间的z顺序。
那么有人可以给我一些建议吗?
谢谢!
答案 0 :(得分:5)
根据您创建视图层次结构的方式 - 将其插入表格视图或下方的导航栏:
- (void)viewDidLoad
[super viewDidLoad];
// let's assume self.tableView is table view
// and self.navigationBar is navigation bar
// that both are subviews of [self view]
UIView *customSubview = [[UIView alloc] initWithFrame:someRect];
[[self view] insertSubview:customSubview aboveSubview:[self tableView]];
// -- OR --
[[self view] insertSubview:customSubview belowSubview:[self navigationBar]];
}
还可以选择在特定索引处插入子视图。因此,如果您的导航栏位于最顶层(即索引0)并且表格视图位于最底层(即[[[[self view] subviews] count] - 1]
的索引),您可以在此处插入自定义视图,如下所示:
[[self view] insertSubview:customSubview atIndex:1];
这样,您的表格视图将在其超级视图中下降一级,并且子视图的“分层”将跟随:
请注意,将自定义子视图放入标准超级视图时,您必须自己保持位置,因为它不会像以前那样与tableview一起滚动。