UINavigationController 推送带有隐藏导航栏的视图控制器

Posted

技术标签:

【中文标题】UINavigationController 推送带有隐藏导航栏的视图控制器【英文标题】:UINavigationController push viewcontroller with hidden navigationbar 【发布时间】:2014-03-03 16:12:23 【问题描述】:

我有一个UINavigationController,如果用户滚动,它的navigationBar 会隐藏(使用UIScrollViewDelegate 完成,而不是平移手势)。

但是当我将一个新的viewController 压入堆栈时,新控制器视图的原点 y 位于 64 像素,而不是旧 topViewController 的 y 所在位置(即 21 像素)。

如何进行推送,以使新控制器出现在与旧控制器相同的位置?

唯一更新视图框架成功的地方是viewDidAppear,但那已经晚了,因为用户可以在一秒钟内看到顶部的黑色空间。

更新:

似乎必须在viewWillAppearviewDidAppear 之间完成,但我找不到合理的方法来做到这一点。

试图改变UINavigationController 的视图(目前我只是移动它是navigationBar),但这会弄乱布局。

再次更新:

更多信息,因为答案和 cmets 都没有帮助。导航控制器是从情节提要中实例化的。这是一个自定义的UINavigationController,它在topViewControllerscrollView 滚动上隐藏了navigationBar(没有其他内容被覆盖)。

第一个topViewController(从它开始推送)是一个UIViewController,有两个容器视图(一个如果已登录,另一个如果未登录)。第二个topViewController(被压入堆栈的那个)是一个带有全屏UIWebViewUIViewController

一切都来自故事板。对于每个viewController,所有Extended Edges 复选框都处于关闭状态,并且所有navigationBars 都是不透明的。 AutoLayout 无处不在,而且(我认为设置正确)。

【问题讨论】:

检查您的新 ViewController 和您从中推送的 ViewController 是否具有相同的 navigationBar 属性。 navigationBar.translucentnavigationBar.opaque 这些属性改变了 ViewController 视图的 originY。 谢谢,但它们都是不透明的。 在我的应用程序中,我所做的是使用bool 属性来访问在推送新VC 时导航栏是否隐藏在viewController 中。在 viewWillAppear 中,我检查了 navBar 是否被隐藏。如果是,我设置它的框架。我不确定这是否是最佳做法,但它确实有效。 这是我想要做的,但在viewWillAppear 中设置不起作用。当它到达viewDidAppear 时,帧又回到了原来的状态。某些东西正在改变viewWillAppearviewDidAppear 之间的框架。 【参考方案1】:

--已编辑--

viewWillAppearmethod 中更改您的框架

- (void)viewWillAppear:(BOOL)animated 
    [super viewWillAppear:animated];
    [self.view setFrame:CGRectMake(0, 21, self.view.frame.size.width, self.view.frame.size.height)];

或者你的 newController 的 setFrame 在被推送之前。

NewController *newC = [NewController alloc] initWithNibName:@"NewController" bundle:nil];
[newC.view setFrame:CGRectMake(0, 21, self.view.frame.size.width, self.view.frame.size.height)];

[self.navigationController pushViewController:newC animated: YES];

【讨论】:

以上是关于UINavigationController 推送带有隐藏导航栏的视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

如何使 UINavigationController 从左侧推送?

UINavigationController 不会推送其他视图控制器?

UINavigationController:推送的视图何时收到 Dealloc 消息?

使用 UINavigationController 推送两个视图后后退按钮消失

UINavigationController 停止推送视图

UINavigationController 没有推送/显示视图