在iOS中使用自定义导航栏

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

我创build了名为navBar的出口,并做了:

[self.navigationController.navigationBar = navBar; 

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

这听起来可能你并不想使用UINavigationBar 。 正如在参考文件中所述:

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

所以,如果你有计划的定制不只是添加button,改变它的颜色/背景,不透明度,隐藏等等。你可能会更好地创build一个模仿导航栏的外观和感觉的UIView 。

下面是如何给你的UIView一个导航栏的渐变外观的例子。

这是非常灵活的,而且很容易做到,但是在你面前你有很多的阅读和testing。

以防万一,如果只是button,你想添加你可能会更好使用UIToolbar

你不能这样做。 由于导航控制器的导航栏中embedded了大量设置,因此它是只读属性,您不能更改它。

你到底想要做什么,你需要通过界面生成器来做到这一点。 我的意思是,使用最新的API,通过自定义原始的navcontroller的导航栏,用几行代码就可以简单地完成所有你想要的任务。

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

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

 [self.navigationController.navigationBar setItems:newNavItems]; 

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

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