8

我有一个工作应用程序,它是一个基于 tabbarcontroller 的应用程序。第一个 viewcontroller 是一个 uitableviewcontroller。所有 3 个选项卡的顶部都有一个导航栏,这是我从对象库中添加的。这是应用程序的外观:

带有 UINavbar 的第一个选项卡中的原始 UITableViewController

然后我想将导航栏上的图像设置为居中的徽标。所以我环顾四周,发现代码如下:

 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 拖入导航栏来添加它,但由于某种原因它使导航栏消失了,我最终得到了这个:

将 UIImageView 添加到 UINavBar 后

为什么会这样?

4

1 回答 1

21

Interface Builder 不支持您的操作方式。我会鼓励你提交雷达来支持这样做。您可以通过两种不同的方式完成此操作,一种在代码中,另一种在 IB 中。

通过界面生成器

您可以从对象库中拖动一个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;
}
于 2013-08-07T17:07:33.220 回答