【问题标题】:How to reliably place built-in UINavigationController UIToolbar on top of iPad view如何可靠地将内置 UINavigationController UIToolbar 放置在 iPad 视图之上
【发布时间】:2011-01-24 18:30:34
【问题描述】:

我试图在我的 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 将其添加到每个视图中。但是,这会导致工具栏在每个视图被推送或弹出时进行动画处理,因为它实际上是视图的一部分,这看起来很“做作”。

对可能的解决方案有什么想法吗?

谢谢大家!

【问题讨论】:

    标签: iphone cocoa-touch ipad uinavigationcontroller uitoolbar


    【解决方案1】:

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

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

    这有点骇人听闻,但您可以自己制作一个 UIToolbar 并将其直接添加到窗口(即在导航控制器上)。

    【讨论】:

    • 天哪,有时最简单的事情......我不敢相信我没有想到这一点!我认为这根本不是“hacky”,而且看起来很正确。谢谢!
    【解决方案2】:

    您可以使用下面的类别来修改 UIToolbar 类以实现您所追求的。

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-07-01
        • 1970-01-01
        • 2016-09-02
        • 2011-03-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多