2014-03-03 130 views
0

如果用户滚动(使用UIScrollViewDelegate,而不是使用平移手势),则隐藏UINavigationControllernavigationBarUINavigationController使用隐藏的导航栏推视图控制器

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

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

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

更新时间:

它接缝像它必须viewWillAppearviewDidAppear之间完成的,但我无法找到合理的方法来做到这一点。

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

更新:

一些更多的信息,因为没有任何答复和意见的帮助。导航控制器从故事板实例化。这是一个自定义UINavigationController,它隐藏了navigationBar它的topViewControllerscrollView滚动(没有别的被覆盖)。

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

一切都来自故事板。所有Extended Edges复选框已关闭,每viewController和所有navigationBars是不透明的。在任何地方都可以使用AutoLayout(我认为安装正确)。

+0

检查是否新的ViewController的和的ViewController从中正在推动具有相同的导航栏属性。 'navigationBar.translucent'和'navigationBar.opaque' 这些属性改变了ViewController视图的原点。 – Srikanth

+0

谢谢,但他们都是不透明的。 – szotyi

+0

在我的应用程序中,我所做的是,使用'bool'属性来访问导航栏在推送新VC时是否隐藏在viewController中。在viewWillAppear中,我检查navBar是否隐藏。如果是,我将其设置为框架。我不确定这是否是最佳做法,但它确实有效。 – n00bProgrammer

回答

0

--Edited--

改变您在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]; 
+0

没有一个可行。请在您回复之前进行检查。 – szotyi

相关问题