элементы навигации, исчезающие из UINavigationBar - PullRequest
0 голосов
/ 18 декабря 2008

Я добавляю пользовательское фоновое изображение на панель навигации, создавая представление изображения и выполняя [navigationController.navigationBar addSubview:imageView].

Фон в порядке. Но как только я это делаю, другие мои элементы навигации начинают вести себя странным образом. Иногда появляется navigationItem.title, кнопка возврата исчезает. И это совершенно случайно. Есть идеи, что может быть причиной этого?

Спасибо.

Ответы [ 3 ]

2 голосов
/ 26 мая 2009

В качестве дополнительной мысли мне удалось создать полностью настроенную панель навигации, переопределив drawRect:, чтобы она отображала фоновое изображение. Оттуда стало легко устанавливать свойства leftBarButtonItem, rightBarButtonItem и titleView свойства navigationItem моего контроллера навигации для получения пользовательских кнопок и заголовков. Это работает со встроенным контроллером навигации / панелью навигации / логикой элемента навигации, поэтому нет риска скрытия или затенения объектов (например, кнопок панели).

В категории UINavigationBar:

- ( void )drawRect:( CGRect )rect
{
    [ [ UIImage imageNamed:@"background-image.png" ] drawInRect:CGRectMake( 0, 0, 
      self.frame.size.width, self.frame.size.height ) ];
}

Прямо перед вызовом pushViewController:animated: сделайте что-то вроде этого:

UIButton * leftButton = [ UIButton buttonWithType:UIButtonTypeCustom ];
leftButton.frame = CGRectMake( 0.0, 0.0, 65.0, 32.0 );
[ leftButton setImage:[ UIImage imageNamed:@"left.png" ] forState:UIControlStateNormal ];
[ leftButton addTarget:self action:@selector( leftAction ) forControlEvents:UIControlEventTouchUpInside ];

UIButton * rightButton = [ UIButton buttonWithType:UIButtonTypeCustom ];
rightButton.frame = CGRectMake( 0.0, 0.0, 65.0, 32.0 );
[ rightButton setImage:[ UIImage imageNamed:@"right.png" ] forState:UIControlStateNormal ];
[ rightButton addTarget:self action:@selector( rightAction ) forControlEvents:UIControlEventTouchUpInside ];

UIImageView * titleView = [ [ UIImageView alloc ] initWithImage:[ UIImage imageNamed:@"title.png" ] ];

UIBarButtonItem * leftBarButtonItem = [ [ UIBarButtonItem alloc ] initWithCustomView :leftButton ];
UIBarButtonItem * rightBarButtonItem = [ [ UIBarButtonItem alloc ] initWithCustomView:rightButton ];

nextController.navigationItem.leftBarButtonItem = leftButtonItem;
nextController.navigationItem.rightBarButtonItem = rightButtonItem;
nextController.navigationItem.titleView = titleView;

Возможно, он немного занят, но вы можете абстрагировать весь этот код в метод (или его серию) где-то еще. Этот подход имеет тенденцию работать хорошо, если вы хотите полностью переопределить любой из стилей, которые появляются в вашей панели навигации.

Надеюсь, это поможет!

2 голосов
/ 18 декабря 2008

Когда вы добавляете свое подпредставление в процессе настройки просмотра? Вы можете делать это после того, как были добавлены другие ваши элементы навигации, и поэтому он покрывает их. Попробуйте либо добавить его в свой метод -loadView, либо подождать до -viewWillAppear: и использовать -sendSubviewToBack: после добавления.

1 голос
/ 18 декабря 2008

Установка imageView на индекс 0 и решение моей проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...