如果用户滚动(使用UINavigationController
完成,而不是使用平移手势),我会隐藏navigationBar
及其UIScrollViewDelegate
。
但是当我将一个新的viewController
推入堆栈时,新控制器的视图的原点y为64px,而不是旧的topViewController
的y(即21px)。
如何进行推动,以便新控制器出现在与旧控制器相同的位置?
唯一更新视图框架成功的地方是viewDidAppear
,但这是迟到的,因为用户可以看到顶部的黑色空间一秒钟。
更新:
它必须在viewWillAppear
和viewDidAppear
之间完成,但我找不到合理的方法来执行此操作。
试图改变UINavigationController
的视图(目前我只是移动它的navigationBar
),但这会弄乱布局。
再次更新:
更多信息,因为没有一个答案和评论有帮助。导航控制器是从故事板中实例化的。这是一个自定义UINavigationController
,它隐藏了navigationBar
topViewController
的{{1}}滚动(没有其他任何内容被覆盖)。
第一个scrollView
(从中开始推送)是一个topViewController
,有2个容器视图(如果登录则为一个,否则为其他视图)。第二个UIViewController
(被推入堆栈的topViewController
是UIViewController
,全屏UIWebView
。
一切都来自故事板。对于每个Extended Edges
,所有viewController
复选框均已关闭,并且所有navigationBars
都是不透明的。 AutoLayout
随处可见,(我认为设置正确)。
答案 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];