3

toolbarUINavigationController中属性的文档说:

此属性包含对导航控制器管理的内置工具栏的引用。此工具栏的访问权仅提供给希望从工具栏中显示操作表的客户。您不应该直接修改 UIToolbar 对象。

我可以理解为什么我不应该修改工具栏的可见性或项目,因为 UINavigationController 提供了一个接口来做到这一点。但是我添加了一个按钮,当点击该按钮时,工具栏会在屏幕外显示动画。为什么我不应该这样做?

我是否必须创建自己的 ToolbarNavigationController 类来复制 UINavigationController 对工具栏所做的一切,我可以用工具栏做我想做的事吗?当 UINavigationController 已经做了我想要的事情时,这似乎是一种浪费。为什么文档会建议我如此严格地限制我用它做的事情?

4

2 回答 2

2

移动导航栏的三种方式可能会混淆它:

  1. 如果您的应用程序可以旋转,它是否在旋转后停留在正确的位置?当它返回屏幕时,它是否从正确的位置开始动画?
  2. 如果显示搜索栏,导航栏会自动关闭。如果它已经被手动移动过,它知道它在哪里吗?
  3. 如果将viewControllerhidesBottomBarWhenPushed设置YES并返回,是否navigationController将其工具栏放回它所属的位置?

另一方面,调用UINavigationController setNavigationBarHidden:NO animated:YES怎么样 - 这样做是否符合您的要求,同时让导航控制器保持对其工具栏的控制?

编辑:抱歉误读。是的,您可能可以按照您的要求做,只要您不做任何意味着navigationController移动其工具栏的任何事情(如上面的第 3 项)。

另一方面,你想要的行为也可以实现如下:

  1. 对于viewController具有多个工具栏的 ,将其设置hidesBottomBarWhenPushedYES.
  2. 所有需要的工具栏viewController放在上面,并让它完全控制它们的位置和可见性。

如果默认工具栏与 navigationController 自己的工具栏具有相同的布局,这将产生奇怪的视觉效果,即看到同一组工具栏项目滑下然后又滑开,但其他一切都应该正常工作。

于 2012-04-11T05:35:07.757 回答
0

UIToolbar 是不可访问的,因为它不需要访问。它对 +appearance 的响应很好。在您的情况下,您可以访问只读变量的属性(查看 CGRect!)。如果您需要在屏幕外为 UIToolbar 或 UINavigatiomBar 设置动画,请将其 frame.center 属性设置为 UIView 动画块中的 CGPointMake。

于 2012-04-11T04:59:26.900 回答