【发布时间】: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之间的框架。
标签: ios objective-c ios7 uinavigationcontroller uinavigationbar