How to remove padding next to a UIBarButtonItem

后端 未结 4 1422
说谎
说谎 2021-01-05 13:46

I have added a custom button to the navigation bar\'s custom right bar button item as shown in the image.

I\'m want to be able to remove the space after the button

相关标签:
4条回答
  • 2021-01-05 13:51

    You have to create a new view, add button and everything else you want and add it to the titleView as shown.

    - (void)viewDidLoad {
        self.navigationItem.titleView = [self titleView];
    }
    
    - (UIView *)titleView {
        CGFloat navBarHeight = self.navigationController.navigationBar.frame.size.height;
        CGFloat width = 0.95 * self.view.frame.size.width;
        UIView *containerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, width, navBarHeight)];
    ..
    // please add what you need here
    ....
    }
    
    0 讨论(0)
  • 2021-01-05 14:04

    You can do this by adding a UIView then add inside it your button with x=spaceWidth y = 0.

    look at the below code for the right item (this is inside UINavigationItem category)

    1 -

    UIView *_rightView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 44, 44)]; [_rightView setBackgroundColor:[UIColor purpleColor]];//debug color

    2-

        UIButton *aLeftButton = [[UIButton alloc] init];
    
       //...//
    
        aLeftButton.frame = CGRectMake(-15, 0, 44, 44);//in your case +15
        [aLeftButton setBackgroundImage:[UIImage imageNamed:buttonName] forState:UIControlStateNormal];
        [aLeftButton setBackgroundImage:[UIImage imageNamed:[buttonName stringByAppendingString:@"Selected"]] forState:UIControlStateSelected];
        [aLeftButton setAdjustsImageWhenDisabled:NO];
        [aLeftButton setAdjustsImageWhenHighlighted:NO];
    
        [aLeftButton addTarget:theSender action:aSelector forControlEvents:UIControlEventTouchUpInside];
        [_rightView addSubview:aLeftButton];
        UIBarButtonItem *aBarButton = [[UIBarButtonItem alloc] initWithCustomView:_rightView];
        [leftBarButtonsItem addObject:aBarButton];`
    

    3

    self.leftBarButtonItem = leftBarButtonsItem;

    0 讨论(0)
  • 2021-01-05 14:09

    You can't, unless you subclass UINavigationBar or override its methods via category.

    0 讨论(0)
  • 2021-01-05 14:16

    You can add a fixed space element with a negative width (I know, this sounds like a hack, but it works):

    UIButton *aButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];    
    aButton.frame = CGRectMake(50.0, 0.0, 60, 44);
    UIBarButtonItem *aBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:aButton];
    [aButton addTarget:self action:@selector(testButtonControl:) forControlEvents:UIControlEventTouchUpInside];
    
    UIBarButtonItem *spaceFix = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:NULL];
    spaceFix.width = -5;
    
    self.navigationItem.rightBarButtonItems = @[spaceFix, aBarButtonItem];
    
    0 讨论(0)
提交回复
热议问题