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

Добавить изображение в UIBarButtonItem, используя initWithImage: (UIImage *) изображение

Я хотел бы знать, как установить образ в UIBarButtonItem, который затем будет добавлен в UIToolbar, используя InitWithImage при создании UIBarButtonItem.

Я делаю следующее, но создает пустые пробелы, где изображение должно находиться на UIToolbar

UIImage *image = [UIImage imageNamed:@"6.png"];

UIBarButtonItem *systemItem1 = [[UIBarButtonItem alloc] initWithImage:image style:UIBarButtonItemStylePlain target:self action:@selector(pp:)];

Спасибо!

4b9b3361

Ответ 1

Вот пример, который создает кнопку панели инструментов с логотипа Facebook. Создайте указатель на изображение (файл, уже добавленный в xCode), создайте пользовательскую кнопку, измените размер кнопки, чтобы она соответствовала изображению, задайте изображение кнопки, создайте кнопку панели инструментов из представления кнопок.

UIImage *faceImage = [UIImage imageNamed:@"facebook.png"];
UIButton *face = [UIButton buttonWithType:UIButtonTypeCustom];
face.bounds = CGRectMake( 0, 0, faceImage.size.width, faceImage.size.height );
[face setImage:faceImage forState:UIControlStateNormal];
UIBarButtonItem *faceBtn = [[UIBarButtonItem alloc] initWithCustomView:face];

Ответ 2

И для iOS 7+ вы делаете следующее:

Objective-C

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

Swift 2.3

 let image = UIImage(named: "myImage")?.imageWithRenderingMode(.AlwaysOriginal)
 let button = UIBarButtonItem(image: image, style: .Plain, target: self, action: #selector(YOUR_METHOD(_:)))

Swift 3.0

let image = UIImage(named: "myImage")?.withRenderingMode(.alwaysOriginal)
let button = UIBarButtonItem(image: image, style: .plain, target: self, action: #selector(YOUR_METHOD(_:)))

Ответ 3

Я попытался бы установить

UIBarButtonItem *systemItem1 = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"image.png"] style:UIBarButtonItemStylePlain target:self action:@selector(pp:)];

Ответ 4

Из документации UIBarButtonItem:

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

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

Ответ 5

В Swift:

Первое решение

let img = UIImage(named: "picture")!.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)
let leftBarButtonItem = UIBarButtonItem(image: img, style: UIBarButtonItemStyle.Plain, target: self, action: nil)
self.navigationItem.leftBarButtonItem = leftBarButtonItem

Второе решение

let img = UIImage(named: "picture")!
let imgWidth = img.size.width
let imgHeight = img.size.height
let button = UIButton(frame: CGRect(x: 0, y: 0, width: imgWidth, height: imgHeight))
button.setBackgroundImage(img, forState: .Normal)
button.addTarget(self, action: nil, forControlEvents: UIControlEvents.TouchUpInside)
self.navigationItem.rightBarButtonItem = UIBarButtonItem(customView: button)

Ответ 6

После того, как вы создадите элемент панели, сделайте следующее:

systemItem1.image = [systemItem1.image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];

Ответ 7

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

Ответ 8

UIBarbuttonItem initWithImage не будет создавать кнопку панели с указанным изображением. Он создает шаблон UIBarbutton с использованием данного изображения. Если указанное изображение не является прозрачным, на нем будет отображаться кнопка с указанным цветом оттенка, размер которого имеет размер. Если изображение имеет непрозрачные части, тогда цвет оттенка будет заполнен непрозрачными частями, такими как UIBarButtonSystemItemBookmark по умолчанию. Он имеет непрозрачный грань и прозрачную внутреннюю сторону.

В вашем случае titncolor белый, поэтому он показывает белый цвет.

Ответ 9

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