2013-09-21 39 views
11

Vì một số lý do, nút bên phải trong thanh điều hướng cách bên phải 16px. Tôi muốn làm cho lợi nhuận nhỏ hơn. Cách thích hợp để làm điều đó là gì?navigationItem.rightBarButtonMục lề trong iOS7

self.btnDone = [UIButton buttonWithType:UIButtonTypeCustom]; 
UIImage *btnImgDone = [UIImage imageNamed:@"btn_small_default.png"]; 
self.btnDone.titleLabel.font = [UIFont fontWithName:@"HelveticaNeue-Bold" size:15.0]; 
[self.btnDone setTitle:@"Done" forState:UIControlStateNormal]; 
[self.btnDone setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; 
[self.btnDone setTitleShadowColor:[UIColor colorWithWhite:0 alpha:.2f] forState:UIControlStateNormal]; 
self.btnDone.titleLabel.shadowOffset = (CGSize){0,-1}; 
[self.btnDone setBackgroundImage:btnImgDone forState:UIControlStateNormal]; 
[self.btnDone setBackgroundImage:[UIImage imageNamed:@"btn_small_active.png"] forState:UIControlStateHighlighted]; 

self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:self.btnDone]; 

enter image description here

+0

Bạn có tìm thấy câu trả lời nào trong thời gian chờ đợi không? –

Trả lời

8

tôi đã cùng một vấn đề và cách duy nhất tôi tìm thấy để sửa chữa nó là sử dụng các setImageEdgeInsets:.

Nếu bạn muốn di chuyển nút của bạn sang bên phải (ví dụ: 5 điểm hoặc 10 px), thêm dòng sau vào phần khai báo nút:

UIEdgeInsets buttonEdges = UIEdgeInsetsMake(0, 5, 0, -5); 
[self.btnDone setImageEdgeInsets:buttonEdges]; 

Nếu bạn muốn hỗ trợ iOS6 và iOS7 bạn có thể làm điều này:

CGFloat xOffset; 

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0f) 
{ 
    // for ios7 
    xOffset = 5.0f; 
} 
else 
{ 
    // ios6 
    xOffset = 2.0f; 
} 

UIEdgeInsets buttonEdges = UIEdgeInsetsMake(0, xOffset, 0, - xOffset); 
[self.btnDone setImageEdgeInsets:buttonEdges]; 

Hy vọng điều đó sẽ hữu ích!

+0

Nhưng điều này có hiệu quả nếu tôi sử dụng backgroundImage cho nút này? Bởi vì nền sẽ được vắt. –

+0

Lỗi của tôi, tôi không thấy bạn đang sử dụng 'setBackgroundImage: forState:', 'setImageEdgeInsets:' làm việc cho tôi nhưng tôi đang sử dụng 'setImage: forState:' (nó không ép nó). –

6

Cố gắng đặt một không gian cố định sau khi nút đó:

// Fixed space 
UIBarButtonItem *fixedSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil]; 
[fixedSpace setWidth:20.0]; 

self.navigationItem.rightBarButtonItems = @[fixedSpace, yourButton]; 

Toàn bộ mã tôi đã sử dụng là:

// Bar button 
UIButton *loadButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 15, 34)]; 
VVdLoadImage *loadImage = [[VVdLoadImage alloc] initWithFrame:CGRectMake(0, 0, 15, 34)]; 
loadImage.backgroundColor = [UIColor clearColor]; 
loadImage.userInteractionEnabled = NO; 
[loadButton addSubview:loadImage]; 

[loadButton addTarget:self action:@selector(loadCards) forControlEvents:UIControlEventTouchDown]; 
UIBarButtonItem *loadBarButton = [[UIBarButtonItem alloc] initWithCustomView:loadButton]; 

UIBarButtonItem *fixedSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil]; 
[fixedSpace setWidth:20.0]; 

self.navigationItem.rightBarButtonItems = @[fixedSpace, loadButton]; 
+0

Tôi đã thử nhưng kết quả chỉ là ít không gian hơn cho nút của tôi. Lề bên phải vẫn còn. –

+0

Tôi đã thử nghiệm nó một lần nữa với các giá trị khác nhau của setWidth một nó hoạt động cho tôi. – RFG

+0

Nó hoạt động khi tôi sử dụng UIButton mà không có hình nền. Ảnh của bạn có văn bản tiêu đề và hình nền? –

0

Nếu bạn vẫn không thể làm cho nó làm việc, vì một lý do điều này làm việc cho tôi. someButton là UIButton mà tôi đã thêm dưới dạng customView của UIBarButtonItem

someButton.contentEdgeInsets = (UIEdgeInsets){.right=-20}; 
1

Xem của tôi.

func addLogOutButtonToNavigationBar(triggerToMethodName: String) 
{ 
    let button: UIButton = UIButton() 
    button.setImage(UIImage(named: "logOff.png"), forState: .Normal) 
    button.frame = CGRectMake(20, 0, 30, 25) 
    button.contentEdgeInsets = UIEdgeInsets.init(top: 0, left: 10, bottom: 0, right: -10) 

    button .addTarget(self, action:Selector(triggerToMethodName), forControlEvents: UIControlEvents.TouchUpInside) 
    let rightItem:UIBarButtonItem = UIBarButtonItem() 
    rightItem.customView = button 
    self.navigationItem.rightBarButtonItem = rightItem 
}