UINavigationController推送带有隐藏导航栏的viewcontroller

时间:2014-03-03 16:12:24

标签: ios objective-c ios7 uinavigationcontroller uinavigationbar

如果用户滚动(使用UINavigationController完成,而不是使用平移手势),我会隐藏navigationBar及其UIScrollViewDelegate

但是当我将一个新的viewController推入堆栈时,新控制器的视图的原点y为64px,而不是旧的topViewController的y(即21px)。

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

唯一更新视图框架成功的地方是viewDidAppear,但这是迟到的,因为用户可以看到顶部的黑色空间一秒钟。

更新:

它必须在viewWillAppearviewDidAppear之间完成,但我找不到合理的方法来执行此操作。

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

再次更新:

更多信息,因为没有一个答案和评论有帮助。导航控制器是从故事板中实例化的。这是一个自定义UINavigationController,它隐藏了navigationBar topViewController的{​​{1}}滚动(没有其他任何内容被覆盖)。

第一个scrollView(从中开始推送)是一个topViewController,有2个容器视图(如果登录则为一个,否则为其他视图)。第二个UIViewController(被推入堆栈的topViewControllerUIViewController,全屏UIWebView

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

1 个答案:

答案 0 :(得分:0)

- 编辑 -

viewWillAppear方法

中更改框架
- (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];