2013-08-07 123 views
8

我有一个工作的应用程序,这是一个基于tabbarcontroller的应用程序。第一个viewcontroller是一个uitableviewcontroller。所有3个选项卡顶部都有一个导航栏,我从对象库中添加。这是应用程序的样子:为什么添加imageview导航栏故事板中删除导航栏?

Original UITableViewController in first tab with UINavbar

然后我想设置导航栏为中心的标志形象。所以,我环顾四周SO和发现的代码看起来像这样:

UIImage *image = [UIImage imageNamed:@"icon57.png"]; 
UIImageView *imageView = [[UIImageView alloc] initWithImage: image]; 
self.navigationItem.titleView = imageView; 

[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"icon57.png"] forBarMetrics:UIBarMetricsDefault]; 

但它没有工作。我刚收到一个空白的导航栏。所以我决定从对象库,但由于某种原因,它使导航栏消失,我结束了这拖动到的UIImageView添加到导航栏:

After adding UIImageView to UINavBar

为什么会出现这种情况?

回答

21

您在Interface Builder中不支持您的操作方式。我会鼓励你file a radar支持这样做。你可以通过两种不同的方式来完成这一点,一种是代码,另一种是IB。

通过Interface Builder中

您可以从对象库中拖动UIView实例,并把它放到导航栏的中心。这将在视图栏的标题区域内设置视图。然后,您可以采用一个UIImageView实例,并将其添加为您刚刚添加的视图的子视图。

通过代码

您可以设置UIImageView通过代码,使用您的视图控制器的导航项目的titleView属性:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    UIImage *logo = [UIImage imageNamed:@"logo.png"]; 
    self.navigationItem.titleView = [[UIImageView alloc] initWithImage:logo]; 
} 

编辑:

为了在设置在左侧,您必须将图像视图包装在UIBarButtonItem中。您可以使用上述相同的程序在IB中执行此操作,或者使用以下代码执行此操作:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    UIImage *logo = [UIImage imageNamed:@"logo.png"]; 
    UIImageView *imageView = [[UIImageView alloc] initWithImage:logo];  
    UIBarButtonItem *imageButton = [[UIBarButtonItem alloc] initWithCustomView:imageView]; 

    self.navigationItem.leftBarButtonItem = imageButton; 
} 
+0

好的,只是最后一件事。我如何让它位于酒吧的左边而不是中心? – marciokoko

+0

@marciokoko更新。 –

+0

最后一个疑问是,因为我将UINavigationbar放到了我的UIViewController中,该UIViewController位于uitabbarcontroller中,为了使代码正常工作,我需要先在代码中获取导航栏参考,对吗? – marciokoko