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

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

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

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

4b9b3361

Ответ 1

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

Поэтому, если ваше изображение полностью белое, ясно, что у вас нет прозрачности.

рекомендации говорят следующее:

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

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

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

Можно ли создать UIBarButtonItem с цветным изображением?

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

Ответ 2

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

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

Ответ 3

В 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]

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

navigationItem.leftBarButtonItem = [barButtonItem1, barButtonItem2]