在UINavigationBar中更改靠近rightBarButtonItem右侧的位置

时间:2016-03-03 14:48:44

标签: ios objective-c uibarbuttonitem

这是我的代码

- (void)createCustomBtnRightBar:(UIImage *)buttonImage
{
    self.navigationItem.rightBarButtonItem = nil;
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    if (buttonImage != nil) {
        [button setImage:buttonImage forState:UIControlStateNormal];
        button.frame = CGRectMake(0, 0, 45, 33);
        button.imageEdgeInsets = UIEdgeInsetsMake(0, 0, 0, -10);
    } else {
        [button setTitle:@"Add New Pal" forState:UIControlStateNormal];
        button.frame = CGRectMake(0, 0, 110, 24);
        [button.titleLabel setTextAlignment:NSTextAlignmentRight];
    }

    [button addTarget:self action:@selector(onClickBtnSendClip:) forControlEvents:UIControlEventTouchUpInside];    
    [button setBackgroundColor:[UIColor greenColor]];

    //create a UIBarButtonItem with the button as a custom view
    UIBarButtonItem *customBarItem = [[UIBarButtonItem alloc] initWithCustomView:button];

    self.navigationItem.rightBarButtonItem = customBarItem;
}

enter image description here

将宽度更改为200时

enter image description here

添加button.titleEdgeInsets = UIEdgeInsetsMake(0, 20, 0, 0);

enter image description here

  

在所有这些情况下,右侧区域无法移动

我需要这样的东西。

enter image description here

我甚至试过这个

UIBarButtonItem *customBarItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
customBarItem.customView = button;

但确实崩溃了

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Fixed and flexible space items not allowed as individual navigation bar button item. Please use the rightBarButtonItems (that's plural) property.'
*** First throw call stack:
(
    0   CoreFoundation                      0x00000001132a2e65 __exceptionPreprocess + 165
    1   libobjc.A.dylib                     0x0000000112d19deb objc_exception_throw + 48
    2   CoreFoundation                      0x00000001132a2d9d +[NSException raise:format:] + 205
    3   UIKit                               0x000000011156d560 -[UINavigationItem setRightBarButtonItem:animated:] + 131
    4   sdsd sdsdsd                         0x000000010e042dd3 -[SendClipViewController createCustomBtnRightBar:] + 1475
  

在我从故事板直接看到按钮栏之前工作完美,右边的空间更小(我需要)。

enter image description here

任何帮助将不胜感激。感谢

1 个答案:

答案 0 :(得分:13)

您需要使用.Fixed Space来实现此目的:

UIBarButtonItem *negativeSpacer = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
negativeSpacer.width = -10;
self.navigationItem.rightBarButtonItems = @[negativeSpacer, customBarItem];
相关问题