У меня есть изображение, которое я хочу отобразить на UIBarButtonItem, но по какой-то причине он отображает только контур, а все остальные белые. Как я могу отобразить изображение?Могу ли я получить UIBarButtonItem с цветным изображением?
Спасибо!
У меня есть изображение, которое я хочу отобразить на UIBarButtonItem, но по какой-то причине он отображает только контур, а все остальные белые. Как я могу отобразить изображение?Могу ли я получить UIBarButtonItem с цветным изображением?
Спасибо!
UPDATE: См. MANIAK_dobrii's 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];
…
Nope. Как вы можете прочитать в Human Interface Guidelines
После того, как вы определились с появлением значка, следуйте этим рекомендациям, как вы его создать:
Используйте формат PNG. Используйте чистый белый цвет с соответствующей альфой. Не включайте тень. Используйте сглаживание. Если вы решили добавить скос, убедитесь, что он равен 90 ° (чтобы помочь вам сделать это, представьте источник света, расположенный в верхней части значка). Для значков панели инструментов и панели навигации создайте значок размером около 20 x 20 пикселей. Для значков панели вкладок создайте значок размером около 30 х 30 пикселей.
Примечание. Значок, который вы предоставляете для панелей инструментов, навигационных панелей и полос табуляции, используется в качестве маски для создания значка, отображаемого в приложении. Нет необходимости создавать полноцветную иконку.
Там в другой 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, чтобы заставить ваше изображение всегда отображаться как оригинал.
Это должен быть принятый ответ. – Apfelsaft
@Apfelsaft - возможно, это было бы, если бы iOS 7 существовала в 2009 году, когда задавался вопрос :) Я отредактировал принятый ответ на ссылку на этот. – ToolmakerSteve
Существует другой способ, который не включает кодирование вообще.
Сначала поместите изображения, которые вы хотите поместить на панель в документе Assets.xcassets.
Выберите изображение в обозревателе активов.
Откройте инспектор Атрибуты для этого изображения на правой вертикальной панели инструментов.
На "Render As" выбрать "Original Image".
Даже несмотря на раскадровке кнопки будут продолжать быть окрашены в оттенок цвета, при работе на тренажере будет показано исходное изображение.
Режим рендеринга по умолчанию для изображения изменяется от одного элемента управления пользовательского интерфейса к другому. Однако, если вы установите этот параметр в инспекторе атрибутов, вы можете заставить изображение всегда отображаться в определенном режиме рендеринга.
Если вам нужно одно и то же изображение, которое будет отображаться с различными режимами рендеринга на разных контроллерах, тогда ответ от MANIAK_dobrii более уместен.
Отличный ответ! –
Спасибо, это МНОГО очиститель – ekscrypto
В 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
Если вы хотите название на кнопке, вы можете захотеть изменить setImage линию setBackgroundImage. Если нет, то приведенный выше код работает нормально. – rein
спасибо большое человек – vodkhang
Не забудьте 'button.showsTouchWhenHighlighted = YES', поэтому кнопка загорается, когда используется как обычный UIBarButtonItem. – azdev