У меня есть изображение, которое я хочу отобразить на UIBarButtonItem, но по какой-то причине он отображает только контуры, а остальное - все белые. Как я могу на самом деле отображать изображение?
Спасибо!
У меня есть изображение, которое я хочу отобразить на UIBarButtonItem, но по какой-то причине он отображает только контуры, а остальное - все белые. Как я могу на самом деле отображать изображение?
Спасибо!
ОБНОВЛЕНИЕ: См. 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];
…
Там другое решение 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, чтобы заставить ваш образ всегда в качестве оригинала.
Существует другой способ, который вообще не включает кодирование.
Сначала поместите изображения, которые вы хотите поместить на панель в документе Assets.xcassets.
Выберите изображение в обозревателе ресурсов.
Откройте инспектор атрибутов для этого изображения на правой вертикальной панели инструментов.
В "Render As" выберите "Исходное изображение".
Даже если на раскадровке кнопки будут окрашиваться цветом оттенка, при запуске на симуляторе будет показано исходное изображение.
Режим рендеринга по умолчанию для изображения изменяется от одного элемента управления пользовательского интерфейса к другому. Однако если вы установите этот параметр в инспекторе атрибутов, вы можете заставить изображение всегда отображаться в определенном режиме рендеринга.
Если вам нужно, чтобы одно и то же изображение было представлено с различными режимами рендеринга на разных контроллерах, более подходящим является ответ от MANIAK_dobrii.
Неа. Как вы можете прочитать в Руководства по человеческому интерфейсу
После того, как вы определили внешний вид своего значка, следуйте этим рекомендациям при его создании:
Используйте формат PNG. Используйте чистый белый цвет с соответствующей альфой. Не включайте тень. Используйте сглаживание. Если вы решили добавить скос, убедитесь, что он равен 90 ° (чтобы помочь вам это сделать, представьте источник света, расположенный в верхней части значка). Для значков панели инструментов и панели навигации создайте значок размером около 20 x 20 пикселей. Для значков панели вкладок создайте значок размером около 30 х 30 пикселей.
Примечание. Значок, который вы предоставляете для панелей инструментов, навигационных панелей и полос вкладок, используется в качестве маски для создания значка, который вы видите в своем приложении. Нет необходимости создавать полноцветную иконку.
В 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