Подтвердить что ты не робот

Могу ли я получить UIBarButtonItem с цветным изображением?

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

Спасибо!

4b9b3361

Ответ 1

ОБНОВЛЕНИЕ: См. MANIAK_dobrii answer для более простого решения, доступного в iOS 7 +.


Вот как я использую изображение для UIBarButtonItem:

UIImage *image = [UIImage imageNamed:@"buttonImage.png"];
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
button.bounds = CGRectMake( 0, 0, image.size.width, image.size.height );    
[button setImage:image forState:UIControlStateNormal];
[button addTarget:myTarget action:@selector(myAction) forControlEvents:UIControlEventTouchUpInside];    
UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithCustomView:button];
…

Ответ 2

Там другое решение iOS7 +:

NSString *iconFilename = // ...
UIImage *image = 
    [[UIImage imageNamed:iconFilename] 
        imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
UIBarButtonItem *barButtonItem = 
    [[UIBarButtonItem alloc] initWithImage:image
                                     style:UIBarButtonItemStylePlain 
                                    target:self 
                                    action:@selector(onBarButtonItemTapped:)];

Выдержка из UIImage.h:

... навигационные панели, панели вкладок, панели инструментов и сегментированные элементы управления автоматически обрабатывают их изображения переднего плана в виде шаблонов... Вы можете использовать UIImageRenderingModeAlwaysTemplate, чтобы заставить ваше изображение всегда отображаться как шаблон или UIImageRenderingModeAlwaysOriginal, чтобы заставить ваш образ всегда в качестве оригинала.

Ответ 3

Существует другой способ, который вообще не включает кодирование.

Сначала поместите изображения, которые вы хотите поместить на панель в документе Assets.xcassets.

Выберите изображение в обозревателе ресурсов.

Выбрать изображение

Откройте инспектор атрибутов для этого изображения на правой вертикальной панели инструментов.

Инспектор атрибутов

В "Render As" выберите "Исходное изображение".

Исходное изображение

Даже если на раскадровке кнопки будут окрашиваться цветом оттенка, при запуске на симуляторе будет показано исходное изображение.

Симулятор

Режим рендеринга по умолчанию для изображения изменяется от одного элемента управления пользовательского интерфейса к другому. Однако если вы установите этот параметр в инспекторе атрибутов, вы можете заставить изображение всегда отображаться в определенном режиме рендеринга.

Если вам нужно, чтобы одно и то же изображение было представлено с различными режимами рендеринга на разных контроллерах, более подходящим является ответ от MANIAK_dobrii.

Ответ 4

Неа. Как вы можете прочитать в Руководства по человеческому интерфейсу

После того, как вы определили внешний вид своего значка, следуйте этим рекомендациям при его создании:

Используйте формат PNG. Используйте чистый белый цвет с соответствующей альфой. Не включайте тень. Используйте сглаживание. Если вы решили добавить скос, убедитесь, что он равен 90 ° (чтобы помочь вам это сделать, представьте источник света, расположенный в верхней части значка). Для значков панели инструментов и панели навигации создайте значок размером около 20 x 20 пикселей. Для значков панели вкладок создайте значок размером около 30 х 30 пикселей.

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

Ответ 5

В Swift 3:

let iconname = // ...
let image = UIImage(named: iconname)?.withRenderingMode(.alwaysOriginal)
let barButtonItem = UIBarButtonItem(image: image, style: .plain, target: self, action: #selector(self. onBarButtonItemTapped))
self.navigationItem.leftBarButtonItem = barButtonItem