2016-03-03 109 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