如何在iPad视图上可靠地放置内置的UINavigationController UIToolbar

时间:2011-01-24 18:30:35

标签: iphone cocoa-touch ipad uinavigationcontroller uitoolbar

我正在尝试在我的iPad应用程序中使用UINavigationController对象的内置UIToolbar对象,但我希望它显示在视图的顶部而不是底部,这是它默认的位置。

我也隐藏了UINavigationController对象的导航栏。

为了完成这项工作,我必须编写以下代码:

navigationController.navigationBarHidden = YES;
navigationController.toolbarHidden = NO;
navigationController.toolbar.frame = CGRectMake(0, 0, 768, 44);

此解决方案只有一个例外:当应用程序再次进入后台并变为活动时,工具栏将始终重新定位在视图的底部。

我已经尝试将代码从viewDidLoad移动到viewDidAppear:animated,它仍然以这种方式运行。

首先,有没有更好的方法来解决这个问题,如果没有,我怎么能阻止工具栏被重新定位?

我还决定使用我自己的UIToolbar对象,并通过自定义的Base UIViewController类'viewDidLoad将其添加到每个视图。但是,这会导致工具栏在推送或弹出每个视图时进行动画处理,因为它实际上是视图的一部分,这似乎只是“笨蛋”。

关于可能解决方案的任何想法?

谢谢大家!

3 个答案:

答案 0 :(得分:2)

在UINavigationController的工具栏属性下的文档中说:

  

仅为希望从工具栏显示操作表的客户提供对此工具栏的访问权限。您不应直接修改UIToolbar对象。

这有点像hackish,但你可以自己创建一个UIToolbar并将其直接添加到窗口(即通过导航控制器)。

答案 1 :(得分:1)

您可以使用以下类别修改UIToolbar类,以实现您的目标。

@implementation UIToolbar (setCenter)

-(void)setCenter:(CGPoint)center
[super setCenter:CGPointMake(384, 22)];
}
@end

答案 2 :(得分:-1)

与UINavigationController一起使用时,工具栏的功能有限。它只提供了一种管理工具栏中操作表的便捷方法。

来自文档:“只为希望从工具栏显示操作表的客户提供对此工具栏的访问权限。您不应直接修改UIToolbar对象。”

我将使用的解决方案是使用便捷方法创建UIView的子类,以管理您的操作表和您需要的任何其他自定义功能。可以在UINavigationController中的所有视图之间共享此自定义视图,并将其放置在父视图中的任何位置。这将使您可以最终控制自定义顶部放置的工具栏。