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

Fen*_* Li 0 iphone cocoa-touch objective-c uikit ios

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

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

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

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

谢谢!

Eim*_*tas 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]];
}
Run Code Online (Sandbox Code Playgroud)

还可以选择在特定索引处插入子视图.因此,如果您的导航栏位于最顶层(即索引0处)并且表视图位于最底部(即索引[[[[self view] subviews] count] - 1]),则可以在此之间插入自定义视图,如下所示:

[[self view] insertSubview:customSubview atIndex:1];
Run Code Online (Sandbox Code Playgroud)

这样,您的表视图将在其超级视图中下降一级,并且子视图的"分层"将遵循:

  1. 索引0 - 导航栏
  2. 索引1 - 自定义子视图
  3. 索引2 - 表格视图

请注意,尽管将自定义子视图放入标准超级视图中,您必须自己保持位置,因为它不会像以前那样与tableview一起滚动.