Iphone setImage方法更改UIBarButtonItem宽度,即使图像大小不为';不变

Iphone setImage方法更改UIBarButtonItem宽度,即使图像大小不为';不变,iphone,ios,objective-c,uibarbuttonitem,Iphone,Ios,Objective C,Uibarbuttonitem,我想在导航栏中添加一个“书签”按钮作为RightBarButtonim - (void)viewDidLoad { [super viewDidLoad]; // Add bookmark button UIBarButtonItem *bookmarkBarButton = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStyleBordered target:self action:@

我想在导航栏中添加一个“书签”按钮作为RightBarButtonim

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Add bookmark button
    UIBarButtonItem *bookmarkBarButton = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStyleBordered target:self action:@selector(bookmark:)];
    [bookmarkBarButton setImage:[UIImage imageNamed:@"greyBookmark.png"]];
    [self.navigationItem setRightBarButtonItem:bookmarkBarButton];
    bookmarkBarButton.tintColor = [UIColor colorWithRed:0.4 green:0.4 blue:0.4 alpha:0.9f];
    b_bookmarked = false;
}

// Will call this method when the bookmark button is pressed
- (IBAction)bookmark:(id)sender
{
    // Toggle color of bookmark icon on button
    if ( (b_bookmarked = !b_bookmarked) )
    {
        [self.navigationItem.rightBarButtonItem setImage:[UIImage imageNamed:@"blueBookmark.png"]];
    }
    else
    {
        [self.navigationItem.rightBarButtonItem setImage:[UIImage imageNamed:@"greyBookmark.png"]];
    }

    // Save bookmark

}
greyBookmark.png和blueBookmark.png的大小均为10x26。当视图出现时,按钮看起来很窄。但当我点击这个按钮时,按钮变宽了,图像仍然会改变。 在bookmark:method中调用setImage方法时,宽度会更改(返回默认大小)。我试图通过调用[navigationItem.rightBarButtonItem setWidth:]来显式设置宽度,但也没有帮助。在这样做之前,宽度属性被设置为0,根据文档,按钮应该根据其图像大小调整大小

我希望右巴布托体有一个恒定的宽度。 第二次调用setImage后,它变得更宽,这有什么原因吗

UIImage *myImage = [UIImage imageNamed:@"greyBookmark.png"];
UIButton *myButton = [UIButton buttonWithType:UIButtonTypeCustom];
[myButton setImage:myImage forState:UIControlStateNormal];
myButton.showsTouchWhenHighlighted = YES;
myButton.frame = CGRectMake(0.0, 3.0, 70,30);
[myButton addTarget:self action:@selector(BookmarkButtonPressed) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *rightbutton = [[UIBarButtonItem alloc] initWithCustomView:myButton];
self.navigationItem.rightBarButtonItem = rightbutton;
将此方法置于
viewDidLoad

-(void)BookmarkButtonPressed

{

      //Do ur work here for Button Action

}

哦,我明白了。因此,您可以创建UIButton并将其用作BarButton。按钮的宽度不再改变,这很好。但是为了改变图像,我必须将barbuttonItem的customView转换为UIButton,并调用SetImageName:forState:对不起,不能投票,没有足够的代表。投票支持我的问题,我将有足够的声誉(15)投票支持你的答案。