如何自定义iOS UINavigationItem?

How to customize iOS UINavigationItem?

我想这是重复的,但经过研究我无法理解如何自定义 UINavigationItem

我有自定义 ViewController (VC),它实现了自定义 class SWRevealViewController(我需要创建滑动菜单)。 我有 Menu VC,对于菜单的每个元素,我都有 Navigation VC,对于菜单的每个元素,我都有自定义 VC

要工作,必须在 Designer 中定义每个后退按钮并具有插座(我还为 navigation item 添加了插座):

@property (weak, nonatomic) IBOutlet UIBarButtonItem *btnSidebareMenu;
@property (weak, nonatomic) IBOutlet UINavigationItem *niTitle;

在我的 .m 文件中我有这个代码:

self.navigationItem.title = @"Custom title";

self.navigationController.topViewController.navigationItem.leftBarButtonItem = self.btnSidebareMenu;
self.btnSidebareMenu.enabled=TRUE;
self.btnSidebareMenu.style=UIBarButtonSystemItemRefresh;

为每个Menu element VC自定义按钮和标题。

我使用此代码来管理菜单导航:

// Manage menu button
SWRevealViewController *revealViewController = self.revealViewController;
if ( revealViewController )
{
    [self.btnSidebareMenu setTarget: self.revealViewController];
    [self.btnSidebareMenu setAction: @selector( revealToggle: )];
    [self.view addGestureRecognizer:self.revealViewController.panGestureRecognizer];
}

导航没问题,但我无法自定义导航栏的外观:

我收到这个:

,但我需要这样的东西:

有什么建议吗?

编辑:

好的,我设法显示了适当大小的图像,更改了导航栏的颜色,但我无法使用 status barnavigation bar。当我设置 navigation bar 的背景颜色时,它也会填充 status bar。我看到了不同的解决方案,但它们不起作用或者我不理解它们。

REMARK: 我有几个不属于 Navigation controller 的页面,其中我的 status bar 是白色的。我需要我的所有页面也是如此。 (我需要它们看起来像图 2,其中状态栏是白色的,导航部分是蓝色的)。

使用这个来改变图标的​​颜色:

    self.navigationController.navigationBar.tintColor = [UIColor redColor];

应用于导航项和栏按钮项的色调。

对于导航栏按钮,我想您可以使用 storyBoardbarButtonItem 拖放到导航栏中。然后就可以设置image属性的barButtonitem.

另请注意,您为此使用的图像应该是精确尺寸,因为它不会按比例缩放。因此,如果您的图片名为 sandwich.png,那么您的资产中应该包含以下两个文件:

  1. sandwich.png - 22x22 像素
  2. sandwich@2x.png - 44x44 像素

另请参阅this and this

更新: 要使图标变为白色或任何其他颜色,您可以更改故事板中 barButtonItem 的色调。