Вопрос

На моем баре Nav у меня есть пара RightbarbuttonItems, которые имеют пользовательские значки (изображения иконы белые, которые хорошо работали с основной цветовой схемой iOS 6).

Под iOS 7 загружается изображения с использованием initWithTitle (см. Scode Fronippet 1) заменяет «белый» цвет в значке на правильный глобальный оттенок (в данном случае определенный цвет темно -синего))

Код фрагмент 1:

UIBarButtonItem *refreshButton = [[UIBarButtonItem alloc] initWithTitle:@"" style:(UIBarButtonItemStyle) UIBarButtonSystemItemCancel target:(self) action:@selector(refreshList)];

refreshButton.image = [UIImage imageNamed:@"RefreshIcon.png"];

Тем не менее, мне нужно было использовать initWithCustomView, чтобы преодолеть странное изменение в поведении, которое заставляло значки выходить из виду. Основная идея состояла в том, чтобы специально установить размер значков. initWithCustomView решила проблему размера, но не отображает изображения кнопок с глобальным оттенком, они отображаются в цвете изображения (белый). Кодовый фрагмент 2 показывает, как я создаю кнопку с помощью initWithCustomView.

Код фрагмент 2:

CGRect frameCustomButton2 = CGRectMake(0.0, 0.0, 18.0, 18.0);
UIButton *customButton2 = [[UIButton alloc] initWithFrame:frameCustomButton2];
[customButton2 setBackgroundImage:iconRefreshButton forState:UIControlStateNormal];
UIBarButtonItem *barCustomButton2 =[[UIBarButtonItem alloc] initWithCustomView:customButton2 ];
barCustomButton2.image = iconRefreshButton;
[customButton2 addTarget:self action:@selector(refreshList) forControlEvents:UIControlEventTouchUpInside];

Весь этот код, конечно, находится в (void) ViewDidload. Я пробовал что -то вроде:

barCustomButton2.tintColor = [UIColor blackColor];  //doesn't work

или [Гарштуттонпейнс Сеттинколор: [UIColor BlackColor]]; // не работает

И они не переопределяют белый цвет изображения. Это почти так, как будто создание индивидуального представления происходит после того, как вид рассматривает глобальный цвет оттенок?

Как я могу гарантировать, что значок кнопки приобретает глобальный оттенок?

Спасибо!

Это было полезно?

Решение

Просто хотел получить это в корневой комментарий, чтобы дать лучший контекст на галочку «Ответ» и дать лучшую форматирование.

Я смог выяснить это! Вы можете сказать изображение всегда отображать в качестве шаблона, что заставит его принять глобальный цвет оттенок.

UIImage *iconRefreshButton = [UIImage imageNamed:@"MyIconFilename.png"];
iconRefreshButton = [iconRefreshButton imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];

По умолчанию, если вы не установите его, является «uiimagerenderingModeaMatomate», что означает, что он будет отображаться как шаблон или исходное изображение на основе контекста.

Другие советы

Вам придется либо обойти эту проблему с первым фрагментом кода, либо вам придется создать подкласс Uibutton, который использует его изображение в качестве маски, чтобы показать цвет оттенка в drawRect:.

Я бы порекомендовал первый подход.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top