无法以编程方式将正确大小的图像添加到UIBarButtonItem

时间:2013-02-15 08:35:49

标签: iphone ios objective-c

我正在尝试使用图像代替我的UIBarButtonItems的标题。我的理解是,为UIBarButtonItem设置图像会自动将图像缩放到UIBarButtonItem的正确大小。这是有道理的,因为似乎没有任何方法来调整图像大小(你不能设置imageView,或添加子视图,或任何东西)。但是,当我使用完全相同尺寸(24x24)的两个不同图像时,我会得到不同的结果:

myAddButton = [[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"plus.png"] style:UIBarButtonSystemItemAdd target:self action:@selector(addButtonTapped)];
self.navigationItem.rightBarButtonItem = myAddButton;

myLeftButton = [[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"gear.png"] style:UIBarButtonSystemItemAdd target:self action:@selector(settingsButtonTapped)];
self.navigationItem.leftBarButtonItem = myLeftButton;

导致以下内容:

enter image description here

同样,gear.png和plus.png大小相同,为24x24。我在Photoshop中证实了这一点。

现在,如果我使用EXACT SAME代码行,只需用plus:

代替齿轮
myAddButton = [[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"plus.png"] style:UIBarButtonSystemItemAdd target:self action:@selector(addButtonTapped)];
self.navigationItem.rightBarButtonItem = myAddButton;

myLeftButton = [[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"plus.png"] style:UIBarButtonSystemItemAdd target:self action:@selector(settingsButtonTapped)];
self.navigationItem.leftBarButtonItem = myLeftButton;

我明白了:

enter image description here

颜色的差异是由于一个被启用而另一个没有。

我只想把它们作为UIButton,这样我就可以使用imageViews并自己手动设置它,除了我喜欢使用UIBarButtonItem给我的背景,我不想在Photoshop中重新创建它。

关于这里发生了什么以及我如何解决它的任何想法?

提前致谢。

编辑:

事实证明这个问题是由于我需要清除我的构建并从模拟器中删除应用程序,因为它是从我之前使用过的48x48图像中提取的。

4 个答案:

答案 0 :(得分:2)

确保您的项目中有正确的图像。并且,是的,有时尝试清理您的项目。从设备/模拟器中删除应用程序也很有帮助。

答案 1 :(得分:1)

您正在传递用于创建按钮的方法的不正确样式:

这里:

[[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"plus.png"] style:UIBarButtonSystemItemAdd target:self action:@selector(settingsButtonTapped)];

您正在使用initWithImage:style:target:action,但您分配的UIBarButtonSystemItemAdd样式值不是允许值之一。该方法的文档说明它必须是UIBarButtonItemStyle中定义为的一个。尝试使用其中一个,看看你是否能得到你想要的效果。

typedef enum {
   UIBarButtonItemStylePlain,
   UIBarButtonItemStyleBordered,
   UIBarButtonItemStyleDone,
} UIBarButtonItemStyle;

答案 2 :(得分:0)

以下是您可以尝试的内容

UIButton *leftButton = [ UIButton buttonWithType:UIButtonTypeCustom];    
        [leftButton setFrame:CGRectMake(0,0,44,44)]; // set the frame according to the image size
        [leftButton setBackgroundImage:[UIImage imageNamed:@"plus.png"] forState:UIControlStateNormal];
        [leftButton addTarget:self action:@selector(myActionMethod:)    forControlEvents:UIControlEventTouchUpInside];

        myLeftButton = [[UIBarButtonItem alloc]initWithCustomView:leftButton];
      self.navigationItem.leftBarButtonItem = myLeftButton;

答案 3 :(得分:0)

self.navigationItem.leftBarButtonItem =[[[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addButtonTapped)]autorelease];