2010-05-25 4 views
17

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

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

+0

Трудно сказать, не видя кода или установки IB – willcodejavaforfood

ответ

18

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

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

guidelines есть это, чтобы сказать:

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

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

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

Can I have a UIBarButtonItem with a colored image?

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

9

в ИО 7 и далее, это поможет

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

В 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 на правой стороне. Чтобы показано левое просто изменить к

navigationItem.leftBarButtonItem = [barButtonItem1, barButtonItem2]