2016-03-03 53 views
3

接近rightBarButtonItem右边这是我的代码改变位置在UINavigationBar的

- (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

任何帮助,将不胜感激。由于

回答

12

您需要使用.Fixed空间来实现这一目标:

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

感谢的人。完美的作品。 – jose920405

+0

很高兴听到这个消息 –

+2

使用'self.navigationController.view.layoutMargins.right'获得实际的保证金 – BugaBuga