UINavigationBar с изображением и градиентом фона по умолчанию в iOS5 - PullRequest
3 голосов
/ 03 ноября 2011

Я пытаюсь использовать новую функцию [UINavigationBar appearance] в iOS5, чтобы добавить изображение логотипа на панель UINavigationBars в моем приложении.Прежде всего, я хотел бы сохранить градиент по умолчанию, но центрировать прозрачный png в NavBar.Изображение логотипа имеет ширину примерно 120 пикселей (240 пикселей при 2x).

Сначала я попытался установить фоновое изображение.Поведение по умолчанию для setBackgroundImage:forBarMetrics: похоже на мозаичное изображение, и все прозрачные части показывают цвет фона панели навигации по умолчанию, черный.Я также могу установить цвет фона с помощью модификатора внешнего вида и получить ровный цвет фона, но мне бы очень хотелось получить исходное поведение градиента, не поддерживая для него отдельный ресурс изображения.Это также облегчает настройку в коде, так как я могу настроить оттенок там, а не заново генерировать новое изображение, если я решу изменить его.

Что я пытаюсь использовать:

UIImage *logoImage = [UIImage imageNamed:@"logoImage"];
[[UINavigationBar appearance] setBackgroundImage:logoImage forBarMetrics:UIBarMetricsDefault];

1 Ответ

0 голосов
/ 11 февраля 2012

Вы можете сделать это двумя способами. Если вы хотите, чтобы изображение всегда было на панели навигации, создайте представление изображения и установите его в качестве подпредставления панели навигации:

[self setLogoImageView:[[UIImageView alloc] init]];
[logoImageView setImage:[UIImage imageNamed:@"logo.png"]];
[logoImageView setContentMode:UIViewContentModeScaleAspectFit];

CGRect navFrame = [[navController navigationBar] frame];

float imageViewHeight = navFrame.size.height - 9;

float x_pos = navFrame.origin.x + navFrame.size.width/2 - 111/2;

float y_pos = navFrame.size.height/2 - imageViewHeight/2.0;

CGRect logoFrame = CGRectMake(x_pos, y_pos, 111, imageViewHeight);

[logoImageView setFrame:logoFrame];
[[[self navigationController] navigationBar] addSubview:logoImageView];

Если вы хотите отображать логотип только в определенном виде, установите элемент навигации вида:

[logoImageView setAutoresizingMask:UIViewAutoresizingFlexibleHeight];
[[self navigationItem] setTitleView:logoImageView];
...