UINavigationBar在推送视图动画之前消失并出现在它之后。怎么了?

时间:2012-01-21 13:34:10

标签: ios uinavigationcontroller uinavigationbar

我有三个视图和一个带有背景图像的导航栏。当我按下第二个视图时,一切都应该如此:导航栏停留在其背景图像的位置,只是标题和按钮向左滑动并被“后退”按钮替换为第二个视图的新标题。但是当我推动第三个视图时,过渡就像这样:在动画之前,导航栏完全消失,将应用程序的窗口背景颜色留在其位置,然后,新的导航栏从右侧滑动所有ui元素。当我弹出第三个视图(按下“后退按钮”)时也一样。 任何想法,为什么会发生?这是正常的,但在某些时候,我注意到它开始像这样工作。

2 个答案:

答案 0 :(得分:1)

出于好奇,你在推进堆栈的视图中是否有UISearchBar?我遇到了与你描述的完全相同的问题,原来它是由UISearchBar和UISearchDisplayController引起的。

创建UISearchBar和UISearchDisplayController时,我正在调用

self.searchBar = [[[UISearchBar alloc] init] autorelease];//init the UISearchBarView

then somewhere further along in the code I was calling

[self.searchDisplayController setActive:YES animated:NO];
[self.searchDisplayController setActive:NO animated:NO];

以上两次调用“[setActive:animated:]”会因某种未知原因正确布局UISearchBar。我在互联网的很多地方都看到了这个解决方案。但副作用是当推送具有搜索栏的新视图时导航栏变为白色。

为了解决所有问题,我通过调用:

来初始化UISearchBar
self.searchBar = [[[UISearchBar alloc] initWithFrame:frame] autorelease];

然后我删除了两个调用“[setActive:animated:]”

此更改导致搜索栏布局正确,没有消失的导航栏。

希望有人会发现这篇文章很有用!

答案 1 :(得分:0)

您是不是在主导航控制器的顶部推动UINavigationController?