0

我有一个 UITableView 和一个小的自定义视图。我希望自定义保持在导航栏下方,但在表格视图上方。所以当自定义视图上下移动时,看起来自定义视图从导航栏的后面弹出。

起初,我将自定义视图设为 tableview 的子视图,一切看起来都很好。但是当滚动tableview时,自定义视图的位置也发生了变化,这不是我想要的。

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

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

谢谢!

4

1 回答 1

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 一起滚动。

于 2012-06-19T12:05:52.680 回答