UINavigationBar Пользовательский вид заголовка

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

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

- (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()? Разве весь смысл в использовании внешнего вида состоит в том, чтобы просто создать представление заголовка один раз (как я делал выше над функцией) и иметь его глобально во всех панелях навигации? Как я могу этого достичь?

3 ответа

Решение

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

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

[[UINavigationBar appearance] setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];  

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

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

Другие вопросы по тегам