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. Но вы звоните по навигационной панели