使用initWithImage:(UIImage *)图像将图像添加到UIBarButtonItem

我想知道如何设置一个图像到一个UIBarButtonItem然后将被添加到一个UIToolbar,创build一个UIBarButtonItem时使用InitWithImage。

我正在做以下,但它创build一个空白的图像应该在UIToolbar上的空白

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

谢谢!

下面是一个从Facebook徽标创build工具栏button的示例。 创build一个指向图像的指针(已经添加到xCode的文件),创build一个自定义button,改变button的大小以匹配图像,设置button图像,从button视图创build工具栏button。

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

而对于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(_:))) 

我会尝试设置

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

从UIBarButtonItem的文档 :

显示在栏上的图像来源于该图像。 如果这张图片太大而无法放在栏上,则会缩放。 通常,工具栏和导航栏图像的大小是20 x 20点。 源图像中的alpha值用于创build图像 – 不透明值将被忽略。

换句话说,UIBarButton项目将忽略图像的颜色,并根据当前的条形样式重新着色。 它将显示图像的唯一方法是如果使用不同的alpha值绘制图像。 由于图像的所有像素都具有1的alpha值,因此它们都以最大亮度绘制,并且会得到一个空白区域。

Swift中

首先解决scheme

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

第二种scheme

 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) 

创build您的酒吧按​​钮项目之后做下一步:

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

我也遇到了这个问题,并通过使用带alpha通道的png文件解决了这个问题。 我试图做一个快速的样机,并添加一个后台button,在背景上的jpg文件的默认颜色的button。 我有一个白色的矩形。 但是,当我在透明背景上创build一个箭头,并将其保存为一个PNG文件,它的工作。

UIBarbuttonItem initWithImage不会创build一个带有指定Image的栏button。 它使用给定的图像创build一个UIBarbutton模式。 如果指定的图像不透明,则会显示一个带有指定的tintcolor的条形button,它具有图像的大小。 如果图像具有不透明的部分,那么色彩的颜色将被填充在不透明的部分上,比如默认的UIBarButtonSystemItemBookmarks。它具有不透明的边框和透明的内侧。

在你的情况titncolor是白色的,这就是为什么它显示白色。

我会写和你一样的代码。 请注意,将图像添加到项目时,请确保将其添加到您正在构build的目标中。