Просмотр настраиваемого заголовка UINavigationBar

Я использую протокол UINavigationBar UIAppearance iOS 5, чтобы настроить все мои панели навигации.

Вот моя функция настройки:

- (void)customizeApperance
{
    [[UINavigationBar appearance] setTintColor:[UIColor clearColor]];
    [[UINavigationBar appearance] setAlpha:0.7];
    UIImageView *titleView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"title.png"]];
    [[UINavigationBar appearance] setTitleView:titleView];
}

У меня две проблемы:

  • Во-первых, цвет отображается не как clearColor, а как черный. Какие-либо предложения?

  • Заголовок вообще не отображается. Рэй Вендерлих показывает, как это сделать, добавив: [[rootViewController navigationItem] setTitleView: [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"miniLogo.png"]]] в applicationDidFinishLaunching. Но проблема в том, что представление заголовка будет добавлено только в контроллер корневого представления. Я использую UINavigationController, и когда мне надоело заменять rootViewController на navigationController (имя моего контроллера навигации в AppDelegate), я вообще не могу видеть представление заголовка. Как я могу это исправить? Почему не работает в customizeApperance()? Разве весь смысл использования внешнего вида не в том, чтобы просто один раз создать представление заголовка (как я сделал выше функции) и сделать его глобальным во всех панелях навигации? Как я могу этого добиться?


person darksky    schedule 13.09.2012    source источник
comment
Этот пост может вам помочь. [custom-uinavigationbar-background] [1] [1]: stackoverflow.com/questions / 704558 /   -  person prashant    schedule 13.09.2012


Ответы (3)


[UIColor clearColor] - полностью прозрачный цвет (альфа = 0). Установка этого цвета в качестве оттенка заставляет (черный) фон просвечивать. Может, вы хотите [UIColor whiteColor]?

titleView является свойством UINavigationItem, и каждый контроллер представления имеет свой собственный navigationItem. Поэтому вы не можете установить вид заголовка глобально. Но вы можете установить фоновое изображение UINavigationBar с помощью протокола внешнего вида, возможно, это поможет:

[[UINavigationBar appearance] setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];  
person Martin R    schedule 13.09.2012
comment
Я действительно хотел clearColor, чтобы фон за ним отображался прозрачно. Это можно сделать? - person darksky; 13.09.2012
comment
@Darksky: Попробуйте self.navigationController.navigationBar.translucent = YES;. - person Martin R; 14.09.2012
comment
@MartinR, который работает для того, чтобы сделать панель полупрозрачной, однако кнопки по-прежнему сплошного черного цвета. См. Изображение в stackoverflow.com/questions/ 3081203 / - person Gujamin; 04.10.2012
comment
@Gujamin: Спасибо за информацию. Моя проблема заключалась в том, что я не знал, чего именно Даркски хотел достичь. И я не знаю, нужен ли ему еще на это ответ, уже какое-то время обратной связи не было. - person Martin R; 04.10.2012

Вы пробовали titleView.opaque = NO;? Если для него установлено значение YES (т.е. по умолчанию, поскольку вы используете initWithImage :), система рисования будет считать, что ваше представление заполняет все его границы, и не будет беспокоиться о рисовании чего-либо, что перекрывает его фрейм.

person Ryan Artecona    schedule 12.10.2012

setTitleView: это метод для NavigationItem. Но вы вызываете это на панели навигации

person Atif Khan    schedule 22.08.2013