iOS7 excessive navigationbar button padding

后端 未结 6 700
天涯浪人
天涯浪人 2020-12-02 11:05

I\'m experiencing excessive UIBarButtonItem padding/spacing when using the LeftBarItems and RightBarItems (see image below). The icons used on the UIBarButtonItems do not co

6条回答
  •  孤街浪徒
    2020-12-02 11:48

    There are two kinds of button on the navigation bar in iOS 7: button with image and button with text. I wrote a class to do it. Here is how:

    GlobalUICommon.h:

    @interface UIBarButtonItem(CustomUIOfONE)
    
    + (UIBarButtonItem*)barItemWithImage:(UIImage*)image highlightedImage:(UIImage*)highlightedImage xOffset:(NSInteger)xOffset target:(id)target action:(SEL)action;
    
    + (UIBarButtonItem*)barItemWithTitle:(NSString*)title xOffset:(NSInteger)xOffset target:(id)target action:(SEL)action;
    
    @end
    

    GlobalUICommon.m:

    @implementation UIBarButtonItem(CustomUIOfONE)
    
    + (UIBarButtonItem*)barItemWithImage:(UIImage*)image highlightedImage:(UIImage*)highlightedImage xOffset:(NSInteger)xOffset target:(id)target action:(SEL)action
    {
        UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
        [button setFrame:CGRectMake(0, 0, image.size.width, image.size.height)];
        [button addTarget:target action:action forControlEvents:UIControlEventTouchUpInside];
        [button setImage:image forState:UIControlStateNormal];
        [button setImage:highlightedImage forState:UIControlStateHighlighted];
        if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) {
            [button setImageEdgeInsets:UIEdgeInsetsMake(0, xOffset, 0, -xOffset)];
        }
    
        UIBarButtonItem *customUIBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:button];
        return customUIBarButtonItem;
    }
    
    + (UIBarButtonItem*)barItemWithTitle:(NSString*)title xOffset:(NSInteger)xOffset target:(id)target action:(SEL)action
    {
        UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
        [button setTitle:title forState:UIControlStateNormal];
        [button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
        [button setTitleColor:[UIColor redColor] forState:UIControlStateHighlighted];
        [button.titleLabel setFont:[UIFont systemFontOfSize:15]];
        [button setFrame:CGRectMake(0, 0, [button.titleLabel.text sizeWithFont:button.titleLabel.font].width + 3, 24)];
        [button addTarget:target action:action forControlEvents:UIControlEventTouchUpInside];
        if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) {
            [button setContentEdgeInsets:UIEdgeInsetsMake(0, xOffset, 0, -xOffset)];
        }
    
        UIBarButtonItem *customUIBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:button];
        return customUIBarButtonItem;
    }
    
    @end
    

    YourViewController.m:

    Example for Button with Image:

    UIBarButtonItem* leftButtomItem = [UIBarButtonItem barItemWithImage:[UIImage imageNamed:@"yourImage"]
                                                       highlightedImage:[UIImage imageNamed:@"yourImage"]
                                                                xOffset:-11
                                                                 target:self
                                                                 action:@selector(yourHandler)];
    self.navigationItem.leftBarButtonItem = leftButtomItem;
    UIBarButtonItem* rightButtonItem = [UIBarButtonItem barItemWithImage:[UIImage imageNamed:@"yourImage"]
                                                       highlightedImage:[UIImage imageNamed:@"yourImage"]
                                                                xOffset:11
                                                                 target:self
                                                                 action:@selector(yourHandler)];
    self.navigationItem.rightBarButtonItem = rightButtonItem;
    

    Example for Button with Text:

    self.navigationItem.leftBarButtonItem = [UIBarButtonItem barItemWithTitle:@"yourText" xOffset:-11 target:self action:@selector(yourHandler:)];
    self.navigationItem.rightBarButtonItem = [UIBarButtonItem barItemWithTitle:@"yourText" xOffset:11 target:self action:@selector(yourHandler:)];
    

    That's it.

提交回复
热议问题