Могу ли я получить UIBarButtonItem с цветным изображением?
У меня есть изображение, которое я хочу отобразить на UIBarButtonItem, но по какой-то причине он отображает только контуры, а остальное - все белые. Как я могу на самом деле отображать изображение?
Спасибо!
Ответы
Ответ 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