iphonexcodeios7spacingrightbarbuttonitem

How to adjust space between two UIBarButtonItem in rightBarButtonItems


I am using the following codes to add two button to self.navigationItem.rightBarButtonItems, and I think in iOS7, the space between two buttons are too wide, is there a way to decrease the space between these two buttons?

UIBarButtonItem *saveStyleButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"save.png"] style:UIBarButtonItemStyleBordered target:self action:@selector(saveStyle)];

UIBarButtonItem *shareStyleButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAction target:self action:@selector(shareStyle)];

NSArray *arr= [[NSArray alloc] initWithObjects:shareStyleButton,saveStyleButton,nil];

self.navigationItem.rightBarButtonItems=arr;

Appreciate any hint or idea.


Solution

  • Updated at Jul 2015

    A better way to do this is to use storyboard (tested in Xcode 6.4). First, add a UINavigationItem; secondly, add a Bar Button Item; thirdly, add a view to the Bar Button Item you just created in step 2; fourthly, add as many buttons as you wish into that view you just dragged in; lastly, adjust the space with your mouse and constraints.

    Related Questions

    Can't assign multiple Buttons to UINavigationItem when using Storyboard with iOS 5

    How to add buttons to navigation controller visible after segueing?


    Old Answer (Only acceptable for small insets)

    Use imageInsets property:

    leftButton.imageInsets = UIEdgeInsetsMake(0.0, 0.0, 0, -15);
    rightButton.imageInsets = UIEdgeInsetsMake(0.0, -15, 0, 0);
    

    for three or more buttons, the middle one(s) get both insets:

    leftButton.imageInsets = UIEdgeInsetsMake(0.0, 0.0, 0, -15);
    middleButton.imageInsets = UIEdgeInsetsMake(0.0, -15, 0, -15);
    rightButton.imageInsets = UIEdgeInsetsMake(0.0, -15, 0, 0);
    

    For the right side buttons, be careful: the FIRST button in the item array is the RIGHT one:

    rightButton.imageInsets = UIEdgeInsetsMake(0.0, -15, 0, 0);
    middleButton.imageInsets = UIEdgeInsetsMake(0.0, -15, 0, -15);
    leftButton.imageInsets = UIEdgeInsetsMake(0.0, 0.0, 0, -15);
    

    IMPORTANT: Split the inset between the two neighbors; if apply the entire inset to one edge, it will become obvious that the buttons are overlapping in the "blank" space - one button gets all of the "gap" touches. Even when "split" the adjustment like this, at -40 on both edges, the tap will definitely go to wrong button sometimes. -15 or -20 is the most to consider using with this technique.

    By applying this method, the button could even be moved around in four directions.