【问题标题】:Use custom Navigation Bar in iOS在 iOS 中使用自定义导航栏
【发布时间】:2012-07-23 19:36:50
【问题描述】:

我在 .xib 中添加了一个导航栏。 我这样做是因为我想定制它的很多东西。我希望我的导航控制器在该屏幕中使用该导航栏。

我创建了名为 navBar 的插座并做了:

[self.navigationController.navigationBar = navBar;

但它说 navigationBar 是只读的。是否可以将我现有的导航控制器与我添加到屏幕的导航栏链接起来?

【问题讨论】:

    标签: objective-c ios ios5


    【解决方案1】:

    在我看来,您可能实际上并不想使用UINavigationBar。正如参考文档中所述:

    UINavigationBar 类实现了一个用于导航分层内容的控件。它是一个栏,通常显示在屏幕顶部,包含用于在层次结构中上下导航的按钮。主要属性是左(后)按钮、中心标题和可选的右按钮。您可以为每个视图指定自定义视图。

    因此,如果您计划的自定义不仅仅是添加按钮、更改其颜色/背景、不透明度、隐藏等。您最好创建一个模仿导航栏外观的UIView

    这是一个如何提供your UIView that gradient look of a navigation bar 的示例。

    它更灵活,实际上很容易做到,但你需要大量阅读和测试:)。

    以防万一您想添加的只是按钮,最好改用UIToolbar

    【讨论】:

      【解决方案2】:

      你不能那样做。由于导航控制器的导航栏嵌入了 很多 设置,因此它是只读属性,您应该无法更改它。

      您究竟想通过界面构建​​器实现什么目标。我的意思是,使用最新的 API,通过自定义原始导航控制器的导航栏,只需几行代码即可轻松完成您想要的一切。

      【讨论】:

      • 我想在另一个位置绘制导航栏。我试过 [[[self navigationController] navigationBar] setFrame:CGRectMake(6.0f, 33.0f, 308.0f, self.navigationController.navigationBar.frame.size.height)];但它有一个奇怪的行为。它在开头显示一个空白区域,1 秒后导航栏移动到该空白位置。
      • 也许你可以检查一下代码何时被调用,并尝试更早地设置它?
      【解决方案3】:

      您不会在界面构建器中管理导航栏。此外,您不会尝试设置导航控制器的 navigationBar 属性。

      要进行更改,您需要更改 navigationBar 的 navigationItem 属性

      [self.navigationController.navigationBar setItems:newNavItems];
      

      您还可以对导航栏进行其他更改,例如设置背景图像或使其半透明

      self.navigationController.navigationBar.translucent = true;
      [self.navigationController.navigationBar setBackgroundImage:img forBarMetrics:barMetrics];
      

      【讨论】:

      • 我怎样才能改变它的位置?
      • 您可以在这里查看:stackoverflow.com/q/4019619/1535038 但请注意,Apple 不喜欢移动导航栏。如果您不遵循 Apple 的 HIG,您可能会发现您的应用被拒绝
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-04
      • 2011-12-09
      • 2015-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多