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

Posted

技术标签:

【中文标题】当导航栏是超级视图视图时,如何在导航栏后面放置视图?【英文标题】:How to place a view behind navigation bar while the navigation bar is the superview view? 【发布时间】:2012-06-19 12:01:30 【问题描述】:

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

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

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

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

谢谢!

【问题讨论】:

【参考方案1】:

根据您创建视图层次结构的方式 - 将其插入表格视图上方或导航栏下方:

- (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];

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

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

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

【讨论】:

在我的例子中,self.view == self.tableview,因为“self”是一个 UITableViewController。 完成! [self.tableView.superview insertSubview: customView aboveSubview: self.tableView] 正是我想要的!谢谢~

以上是关于当导航栏是超级视图视图时,如何在导航栏后面放置视图?的主要内容,如果未能解决你的问题,请参考以下文章

添加滚动视图时,所有视图都显示在导航栏后面的self.view顶部

以编程方式创建一个视图,将框架设置为超级视图的框架?

如何设置导航栏的后退项

如何将视图放置在 UINaviagationController 子类的导航栏顶部?

有人知道如何从导航栏中删除不需要的动画吗?截图

导航回父视图控制器时,UIButton 在选项卡栏后面 - iOS