2012-06-19 89 views
0

我有一个UITableView和一个小的自定义视图。我希望自定义保持在导航栏下方,但在tableview之上。所以当自定义视图上下移动时,看起来自定义视图从导航栏的后面弹出。如何在导航栏是超视图视图时在导航栏后面放置视图?

首先我让自定义视图的tableview子视图,一切都很好。但是当tableview被滚动时,自定义视图的位置也会改变,这不是我想要的。

然后我做了导航栏的超视图,但现在自定义视图保持在导航栏上方。我不知道如何改变父视图和子视图之间的z顺序。

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

谢谢!

回答

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 - 表视图

虽然把自定义的子视图放到标准的超级视图中,但是你必须保持自己的位置,因为它不会像以前那样一起滚动tableview。

+0

在我的例子中,self.view == self.tableview,因为“self”是一个UITableViewController。 –

+0

完成! [self.tableView.superview insertSubview:customView aboveSubview:self.tableView]就是我想要的!谢谢〜 –