如果用户滚动(使用UIScrollViewDelegate
,而不是使用平移手势),则隐藏UINavigationController
和navigationBar
。UINavigationController使用隐藏的导航栏推视图控制器
但是当我将一个新的viewController
推到堆栈上时,新控制器的视图的原点y是64px而不是旧的topViewController
的y(这是21px)。
我该如何进行推送,以便新控制器出现在与旧控制器相同的位置?
更新视图框架的唯一地方是成功的在viewDidAppear
,但这是迟到的,因为用户可以在第一秒看到顶部的黑色空间。
更新时间:
它接缝像它必须viewWillAppear
和viewDidAppear
之间完成的,但我无法找到合理的方法来做到这一点。
试图改变UINavigationController
的视图(目前我只是移动它的navigationBar
),但这样会弄乱布局。再次
更新:
一些更多的信息,因为没有任何答复和意见的帮助。导航控制器从故事板实例化。这是一个自定义UINavigationController
,它隐藏了navigationBar
它的topViewController
的scrollView
滚动(没有别的被覆盖)。
第一个topViewController
(从中开始推送)是一个UIViewController
,带有2个容器视图(如果已登录,则为一个,否则为其他)。第二个topViewController
(被推入堆栈的那个)是一个全屏UIWebView
的UIViewController
。
一切都来自故事板。所有Extended Edges
复选框已关闭,每viewController
和所有navigationBars
是不透明的。在任何地方都可以使用AutoLayout
(我认为安装正确)。
检查是否新的ViewController的和的ViewController从中正在推动具有相同的导航栏属性。 'navigationBar.translucent'和'navigationBar.opaque' 这些属性改变了ViewController视图的原点。 – Srikanth
谢谢,但他们都是不透明的。 – szotyi
在我的应用程序中,我所做的是,使用'bool'属性来访问导航栏在推送新VC时是否隐藏在viewController中。在viewWillAppear中,我检查navBar是否隐藏。如果是,我将其设置为框架。我不确定这是否是最佳做法,但它确实有效。 – n00bProgrammer