Добавить изображение в 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:)];
Спасибо!
Ответы
Ответ 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
Я бы написал тот же код, что и вы. Обратите внимание, когда вы добавляете изображение в проект, убедитесь, что оно добавлено к цели, с которой вы строите.