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

с любым изображением, которое я пытаюсь intialize UIBarButtonItem, его просто показывает белый фон в размере изображения. Даже когда я устал в interface builder, результат тот же. Все эти изображения при использовании с другими объектами работает отлично.

Как я могу решить это??

3 ответов


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

Итак, учитывая, что ваше изображение полностью белое, ясно, что у вас нет прозрачности.

на рекомендации имейте это сказать:

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

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

однако, вы можете использовать пользовательский вид чтобы получить полноцветное изображение, как показывает этот вопрос:

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

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


в ios 7 и далее это поможет

UIImage *image = [[UIImage imageNamed:@"myImage.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
UIBarButtonItem *button = [[UIBarButtonItem alloc] initWithImage:image style:UIBarButtonItemStylePlain target:self action:@selector(YOUR_METHOD:)];

В Swift 3 Я обнаружил, что следующие работы-здесь показано как массив из более чем одного barButtonItem

  let barButtonItem1    = UIBarButtonItem( image: UIImage(named: "myImage")?.withRenderingMode(.alwaysOriginal) , style: .plain ,target: self, action: #selector(yourAction))
  let barButtonItem2    = UIBarButtonItem(image: UIImage(named: "myImage")?.withRenderingMode(.alwaysOriginal)  , style: .plain, target: self, action: #selector(yourAction))

navigationItem.rightBarButtonItems = [barButtonItem1, barButtonItem2]

Это показывает, Х2 barButtons на rightHandSide. Чтобы показать левый просто измените на

navigationItem.leftBarButtonItem = [barButtonItem1, barButtonItem2]