我在 .xib 中添加了一个导航栏。我这样做是因为我想定制它的很多东西。我希望我的导航控制器在该屏幕中使用该导航栏。
我创建了名为 navBar 的出口并做了:
[self.navigationController.navigationBar = navBar;
但它说 navigationBar 是只读的。是否可以将我现有的导航控制器与我添加到屏幕的导航栏链接起来?
我在 .xib 中添加了一个导航栏。我这样做是因为我想定制它的很多东西。我希望我的导航控制器在该屏幕中使用该导航栏。
我创建了名为 navBar 的出口并做了:
[self.navigationController.navigationBar = navBar;
但它说 navigationBar 是只读的。是否可以将我现有的导航控制器与我添加到屏幕的导航栏链接起来?
在我看来,您可能实际上并不想使用UINavigationBar。正如参考文档中所述:
UINavigationBar 类实现用于导航分层内容的控件。它是一个栏,通常显示在屏幕顶部,包含用于在层次结构中上下导航的按钮。主要属性是左(后)按钮、中心标题和可选的右按钮。您可以为其中的每一个指定自定义视图。
因此,如果您计划的自定义不仅仅是添加按钮、更改其颜色/背景、不透明度、隐藏等。您最好创建一个模仿导航栏外观的UIView 。
这是一个示例,说明如何为您的 UIView 提供导航栏的渐变外观。
它更灵活,实际上很容易做到,但是你有很多阅读和测试在你面前:)。
以防万一如果它只是你想添加的按钮,你最好使用UIToolbar代替
你不能那样做。由于导航控制器的导航栏嵌入了很多设置,因此它是只读属性,您不应该更改它。
您到底想通过界面构建器实现什么目标。我的意思是,使用最新的 API,通过自定义原始 navcontroller 的导航栏,只需几行代码即可轻松完成所有操作。
您不会在界面生成器中管理导航栏。此外,您不会尝试设置导航控制器的 navigationBar 属性。
要进行更改,您需要更改 navigationBar 的 navigationItem 属性
[self.navigationController.navigationBar setItems:newNavItems];
您还可以对导航栏进行其他更改,例如设置背景图像或使其半透明
self.navigationController.navigationBar.translucent = true;
[self.navigationController.navigationBar setBackgroundImage:img forBarMetrics:barMetrics];