当导航栏是超视图视图时,如何在导航栏后面放置视图?

时间:2012-06-19 12:01:30

标签: iphone objective-c ios cocoa-touch uikit

我有一个UITableView和一个小的自定义视图。我希望自定义保留在导航栏下方,但在tableview上方。因此,当自定义视图上下移动时,看起来自定义视图会从导航栏的后面弹出。

首先,我将自定义视图作为tableview的子视图,一切似乎都很好。但是当滚动表视图时,自定义视图的位置也会发生变化,这不是我想要的。

然后我将导航栏设为superview,但现在自定义视图保持在导航栏上方。我不知道如何更改父视图和子视图之间的z顺序。

那么有人可以给我一些建议吗?

谢谢!

1 个答案:

答案 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];

这样,您的表格视图将在其超级视图中下降一级,并且子视图的“分层”将跟随:

  1. 索引0 - 导航栏
  2. 索引1 - 自定义子视图
  3. 索引2 - 表格视图
  4. 请注意,将自定义子视图放入标准超级视图时,您必须自己保持位置,因为它不会像以前那样与tableview一起滚动。