2013-08-07 6 views
8

У меня есть рабочее приложение, которое представляет собой приложение на основе tabbarcontroller. Первый viewcontroller - это uitableviewcontroller. Все 3 вкладки имеют панель навигации сверху, которую я добавил из библиотеки объектов. Это то, что приложение выглядит следующим образом:Почему добавление изображения в панель навигации в раскадровке удаляет навигатор?

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 в навигационной панели, перетащив его в из библиотеки объектов, но по какой-то причине он делает Navbar исчезают, и я в конечном итоге с этим:

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]; 
} 

EDIT:

Для того, чтобы установить его на с левой стороны, вам придется обернуть изображение в 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, который находится внутри uitabbarcontroller, для того, чтобы этот код работал, мне нужно сначала получить ссылку на панель навигации в коде? – marciokoko