Цвет оттенка iOS 7 - UINavigationItem backBarButtonItem не оттеняет, когда initWithImage:

У меня возникли проблемы с нанесением цвета оттенка элемента кнопки панели навигации элемента навигации, когда я создаю элемент кнопки панели с помощью [UIBarButtonItem initWithImage: style: target: selector:].

Является ли использование изображения в качестве контекста обратной связи контроллера больше не подходит? Кажется, я не вижу никаких указаний в HIG, или где это было устаревшим или обескураженным.

Здесь мой код:

UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"camera-navigation_item_back"]
                                                                  style:UIBarButtonItemStyleBordered
                                                                 target:nil
                                                                 action:nil];
[navItem setBackBarButtonItem:barButtonItem];

iOS 7 Результат:

iOS 7

iOS 6 Результат:

iOS 6


EDIT: если я пытаюсь использовать один из элементов системы (плюс знак, мусорный контейнер и т.д.) в качестве моей кнопки, Apple заменяет изображение для заголовка "Назад". Это фактически то же поведение в iOS 6 и 7.

Ответ 1

Установите режим рендеринга изображений на UIImageReneringModeAlwaysTemplate (этот вопрос рассматривается примерно в 33:00 в видео WWDC, упомянутом в предыдущем ответе):

UIImage *backButtonImage = [UIImage imageNamed:@"imageName.png"];
backButtonImage = [backButtonImage imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
UIBarButtonItem * backButton = [[UIBarButtonItem alloc]
                               initWithImage:backButtonImage
                               style:UIBarButtonItemStylePlain
                               target:nil
                               action:nil];
[[self navigationItem] setBackBarButtonItem:backButton];
[[[self navigationItem] backBarButtonItem] setTintColor:[UIColor redColor]];

Последняя строка не нужна, если вы установили tintColor глобально в AppDelegate.h:

[[UIBarButtonItem appearance] setTintColor:[UIColor redColor]];

Ответ 2

Вы должны пойти и посмотреть видео WWDC: Настройка внешнего вида приложений для iOS 7 (сеанс 214, WWDC 2013)

Здесь многое изменилось. Например, есть новый API для UIBarButton Изображение:

@property(nonatomic,retain) UIImage *backIndicatorImage;
@property(nonatomic,retain) UIImage *backIndicatorTransitionMaskImage;

(Изображение маски определяет, где заголовок заголовка отключается, когда он скользит под обратным изображением кнопки во время перехода поп-регулятора вида. Он должен быть установлен. Если он не установлен, установленный вами backIndicatorImage игнорируется.)

Но на самом деле, просто посмотрите видео (часть, о которой я говорю, где-то около минут 14:00 - 16:00, но все видео интересно)