我正在尝试在我的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将其添加到每个视图。但是,这会导致工具栏在推送或弹出每个视图时进行动画处理,因为它实际上是视图的一部分,这似乎只是“笨蛋”。
关于可能解决方案的任何想法?
谢谢大家!
答案 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中的所有视图之间共享此自定义视图,并将其放置在父视图中的任何位置。这将使您可以最终控制自定义顶部放置的工具栏。