我想知道如何将图像设置为UIBarButtonItem,然后在创建UIBarButtonItem时使用InitWithImage将其添加到UIToolbar。
我正在执行以下操作,但它会创建一个空白空白,其中图像应位于UIToolbar上
UIImage *image = [UIImage imageNamed:@"6.png"];
UIBarButtonItem *systemItem1 = [[UIBarButtonItem alloc] initWithImage:image style:UIBarButtonItemStylePlain target:self action:@selector(pp:)];
谢谢!
答案 0 :(得分:70)
这是一个从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];
答案 1 :(得分:66)
对于iOS 7+,您可以执行以下操作:
<强>目标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(_:)))
答案 2 :(得分:41)
我会尝试设置
UIBarButtonItem *systemItem1 = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"image.png"] style:UIBarButtonItemStylePlain target:self action:@selector(pp:)];
答案 3 :(得分:17)
来自documentation of UIBarButtonItem:
条形图上显示的图像来自此图像。如果此图像太大而无法放在条形图上,则会缩放以适合该图像。通常,工具栏和导航栏图像的大小为20 x 20磅。源图像中的alpha值用于创建图像 - 忽略不透明值。
换句话说,UIBarButton项目将忽略图像的颜色并根据当前的条形样式重新着色。显示图像的唯一方法是使用不同的alpha值绘制图像。由于图像的所有像素都具有1的alpha值,因此它们都以最大亮度绘制,并获得空白区域。
答案 4 :(得分:12)
在 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)
答案 5 :(得分:2)
创建栏按钮项后,请执行下一步:
systemItem1.image = [systemItem1.image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
答案 6 :(得分:0)
我也遇到了这个问题,并通过使用带有alpha通道的png文件解决了这个问题。 我试图做一个快速的模型,并在背景上添加一个带有jpg文件的后退按钮,按钮的默认颜色。我有一个白色矩形。但是当我在透明背景上创建一个箭头并将其保存为png文件时,它就可以了。
答案 7 :(得分:0)
UIBarbuttonItem initWithImage不会创建具有指定Image的条形按钮。 它使用给定的图像创建UIBar按钮的模式。如果指定的图像不是透明的,它将显示一个带有指定tintcolor的条形按钮,该按钮具有图像的大小。 如果图像具有不透明的部分,则色调颜色将填充在不透明的部分上,如默认的UIBarButtonSystemItemBookmarks。它具有不透明的边界和透明的内侧。
在你的情况下,titncolor是白色的,这就是它显示白色的原因。
答案 8 :(得分:0)
我会像你一样编写相同的代码。请注意,在向项目添加图片时,请确保将其添加到您正在构建的目标中。
答案 9 :(得分:0)
您可以使用
UIBarButtonItem
- initWithBarButtonSystemItem:target:action:
例如:
[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRewind target:self action:@selector(YOUR_METHOD:)];