iOS版本之间的UIToolbar异常

iOS版本之间的UIToolbar异常,ios,ipad,ios4,uinavigationcontroller,uitoolbar,Ios,Ipad,Ios4,Uinavigationcontroller,Uitoolbar,所以。。。我的问题有点奇怪。我将一个简单的UIToolbar添加到在viewDidLoad时调用的navigationController的视图层次结构中。听起来很简单,对吧?问题是:工具栏本身是透明的,但按钮的版本都不低于iOS5 我整晚都在尝试重新排列和排序setFrame、setTranslucent和setStyle的调用,但没有任何效果,只是空白 所以我有一个大脑屁:如果我做了一个新项目,然后做了完全相同的UIToolbar呢?嗯,它起作用了。完美地所以我又放屁了:如果只是我的实例被破

所以。。。我的问题有点奇怪。我将一个简单的UIToolbar添加到在viewDidLoad时调用的navigationController的视图层次结构中。听起来很简单,对吧?问题是:工具栏本身是透明的,但按钮的版本都不低于iOS5

我整晚都在尝试重新排列和排序setFrame、setTranslucent和setStyle的调用,但没有任何效果,只是空白

所以我有一个大脑屁:如果我做了一个新项目,然后做了完全相同的UIToolbar呢?嗯,它起作用了。完美地所以我又放屁了:如果只是我的实例被破坏了呢?所以我在现有项目中创建了一个新工具栏,它显示为空白

这使我相信navigationController的视图层次结构已损坏,但我不知道以何种方式损坏。。。有人知道如何解决我的难题吗(这是模拟器还是iOS 4.3.2?)

代码(适用于iOS 5+,(尽管有人反对,但仍很有趣),以及其他项目,但不适用于我的项目):

以下是iOS 4.3.2模拟器(顶部)和iOS 5.0.1模拟器(底部)的图片:

编辑:根据Rob的建议,我已将代码更改为self.view addSubview。。。然而,没有变化。至于他问我为什么不使用navigationController的内置工具栏,这是因为我实际上有两个工具栏,它们通过图像中的动作按钮上下移动


编辑2:为了清晰起见,请观察屏幕截图。为什么它是隐形的!!!??我有动画和视图层次向下。如果有人需要查看viewDidLoad方法,它相当庞大和麻烦…

您不应该弄乱
UINavigationController
的视图树。您应该只处理您提供的视图树的一部分

如果您使用的是
UINavigationController
,为什么不使用导航控制器为您提供的工具栏呢




既然已经贬值了,你为什么不试试这个呢


您需要两个工具栏的外观,根据操作按钮上下滑动。不过,您实际上不需要两个工具栏。。。尝试将此作为过渡:

[ toolbar setToolbarHidden: YES animated: YES ] ;
toolbar.topViewController.toolbarItems = < whatever the new toolbar should look like > ;
[ toolbar setToolbarHidden: NO animated: YES ];
[工具栏设置工具栏隐藏:是动画:是];
toolbar.topViewController.toolbarItems=<新工具栏的外观如何>;
[工具栏设置工具栏隐藏:否动画:是];
这里的想法是,根据文档,工具栏的外观将由当前视图控制器的toolbarItems属性控制。您可以创建自定义工具栏项实例,这些实例看起来非常像您想要的任何东西


您可能需要将对setToolbarHidden:的两个调用分开,以便运行循环有机会在将隐藏工具栏返回之前绘制它。

更改为self.view addSubview,无更改。还有,检查编辑。罗伯不是这么说的。您不应该弄乱UINavigationController.view,因为它的行为是内部的,并且在iOS版本之间可能会发生变化。相反,将工具栏添加到视图控制器的视图中,您之前已将其推入导航控制器。我相信这就是我刚才对上述注释所做的。这样做了,没有更新代码。很抱歉但不管怎样,它还是看不见的。这毫无意义。@CodaFi:那么你在代码的其他地方做了一些你没有展示的错误。如果没有更多的细节(和更多的代码),我们就无能为力。但是什么呢?这是相当标准的东西。viewDidLoad方法虽然庞大,但很简单。其中的所有内容都是alloc、init和addSubview。我看不出为什么会发生这种情况;但它对用户体验有着毁灭性的影响。请更准确地说明您正在尝试做什么。你为什么需要这个工具栏?您的代码没有关于自定义需求的提示。。。通常使用UINavigationController的
toolbarHidden
属性,因为每个导航控制器都有一个默认隐藏的工具栏。如果您想在工具栏中使用滑块控件,那么将其传递给UIBarButtonim的
initWithCustomView
方法。更精确吗?怎么用?我已经说明了我的问题,提供了代码,并显示了截图。还有什么可能更简洁呢?我得到了确切的问题。你有解决办法吗?没有,我已经有了。我的问题是为什么它是隐形的!它是不可见的,因为UINavigationController可以自由地对其视图层次结构执行任何操作,包括在您卡在其中的工具栏前面放置不透明的内容。因此,你真的需要随波逐流,而不是试图把你的意志强加给它。这就是为什么我建议使用导航控制器提供的工具栏,导航控制器代码知道这个工具栏,因此不会模糊。但我不再将它添加到导航视图层次结构中,它也没有改变
[toolbar setBarStyle:UIBarStyleBlack];
[toolbar setTranslucent:YES];
[ toolbar setToolbarHidden: YES animated: YES ] ;
toolbar.topViewController.toolbarItems = < whatever the new toolbar should look like > ;
[ toolbar setToolbarHidden: NO animated: YES ];