为什么我不应该修改UINavigationController的工具栏?

时间:2012-04-11 04:30:10

标签: ios cocoa-touch uinavigationcontroller uitoolbar

UINavigationController中toolbar属性的文档说:

  

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

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

我是否必须创建自己的ToolbarNavigationController类,复制UINavigationController对工具栏所做的一切,我可以用工具栏做我想做的事情?当UINavigationController已经完成我想要的工作时,似乎是在浪费精力。为什么这些文件会让我严格限制我用它做什么呢?

2 个答案:

答案 0 :(得分:2)

移动导航栏的三种方法可能会让人感到困惑:

  1. 如果您的应用可以旋转,旋转后它是否会保留在正确的位置?当它返回到屏幕时,它是否从正确的位置动画?
  2. 如果显示搜索栏,导航栏会自动关闭。如果它已经手动移动,它是否知道它在哪里?
  3. 如果您将viewController的{​​{1}}设置为YES并返回,navigationController是否将其工具栏放回原来的位置?
  4. 另一方面,如何调用hidesBottomBarWhenPushed - 这样做可以做到你想要的,同时让导航控制器保持对其工具栏的控制吗?

    修改:抱歉误读。是的,只要你不做任何事情(比如上面的第3项),你就可以做你所要求的事情,这意味着navigationController会移动它的工具栏。

    另一方面,您所需的行为也可以通过以下方式实现:

    1. 对于包含多个工具栏的viewController,请将其hidesBottomBarWhenPushed设置为YES
    2. viewController所需的工具栏放在所有上,并让它完全控制其位置和可见性。
    3. 如果默认工具栏与navigationController自己的工具栏具有相同的布局,这将创建奇怪的视觉效果,即看到同一组工具栏项目滑下然后再打开,但其他一切都应该有效。

答案 1 :(得分:0)

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