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
,但那已经晚了,因为用户可以在一秒钟内看到顶部的黑色空间。
更新:
似乎必须在viewWillAppear
和viewDidAppear
之间完成,但我找不到合理的方法来做到这一点。
试图改变UINavigationController
的视图(目前我只是移动它是navigationBar
),但这会弄乱布局。
再次更新:
更多信息,因为答案和 cmets 都没有帮助。导航控制器是从情节提要中实例化的。这是一个自定义的UINavigationController
,它在topViewController
的scrollView
滚动上隐藏了navigationBar
(没有其他内容被覆盖)。
第一个topViewController
(从它开始推送)是一个UIViewController
,有两个容器视图(一个如果已登录,另一个如果未登录)。第二个topViewController
(被压入堆栈的那个)是一个带有全屏UIWebView
的UIViewController
。
一切都来自故事板。对于每个viewController
,所有Extended Edges
复选框都处于关闭状态,并且所有navigationBars
都是不透明的。 AutoLayout
无处不在,而且(我认为设置正确)。
【问题讨论】:
检查您的新 ViewController 和您从中推送的 ViewController 是否具有相同的 navigationBar 属性。navigationBar.translucent
和 navigationBar.opaque
这些属性改变了 ViewController 视图的 originY。
谢谢,但它们都是不透明的。
在我的应用程序中,我所做的是使用bool
属性来访问在推送新VC 时导航栏是否隐藏在viewController 中。在 viewWillAppear 中,我检查了 navBar 是否被隐藏。如果是,我设置它的框架。我不确定这是否是最佳做法,但它确实有效。
这是我想要做的,但在viewWillAppear
中设置不起作用。当它到达viewDidAppear
时,帧又回到了原来的状态。某些东西正在改变viewWillAppear
和viewDidAppear
之间的框架。
【参考方案1】:
--已编辑--
在viewWillAppear
method 中更改您的框架
- (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 消息?