2011-01-17 33 views
31

Làm cách nào để loại bỏ phần đệm ngang sang trái và phải của các mục UINavigationBar tùy chỉnh bên trái và bên phải? Có vẻ như ~ 10 điểm đệm mà iOS đặt theo mặc định.Đặt UIBarButtonItem dựa trên chế độ xem tùy chỉnh trong thanh điều hướng không có đệm ngang mặc định

Tôi đang tùy chỉnh các nút thanh điều hướng bên trái và bên phải (Tôi đã từ bỏ việc cố gắng đặt backButtonItem của riêng mình, vì vậy tôi chỉ sử dụng leftBarButtonItem).

Trong cả hai trường hợp (trái hoặc phải), nhấn các nút tùy chỉnh này chỉ ra rằng Apple có vẻ bảo toàn một số đệm bên trái của leftBarButtonItem, và ở bên phải của rightBarButtonItem; bất kể tôi tạo ra các thuộc tính nền và hình ảnh tùy chỉnh của UIButton I như thế nào bên trong mục nút thanh bên trái/bên phải làm chế độ xem tùy chỉnh của nó.

Vì UIBarButtonItems không có "khung" tôi có thể truy cập, tôi không thể định vị chúng trong phạm vi superview của họ như tôi có thể bình thường UIViews.

Bất kỳ đề xuất nào về cách xóa phần đệm mặc định này? Xem ảnh chụp màn hình kèm theo để xem bit tôi đang cố gắng để giảm đến một chiều rộng bằng không. Trong ảnh chụp màn hình, biểu tượng dấu cộng xuất hiện chuyển sang bên phải bởi vì tôi đã cho nó một inset; nhưng hình nền được đánh dấu, cũng có lẽ sử dụng inset đó, đang bị cắt bớt ở bên phải của nó).

Xem hình ảnh tại địa chỉ: https://skitch.com/starbaseweb/rj2e5/ios-simulator

Để tham khảo, dưới đây là cách tôi là tạo ra tùy chỉnh của tôi UIBarButtonItem (trong trường hợp này, đó là nút bên phải):

- (UIBarButtonItem *)customAddButtonItemWithTarget:(id)target action:(SEL)action { 
    UIButton *customButtonView = [UIButton buttonWithType:UIButtonTypeCustom]; 

    customButtonView.frame = CGRectMake(0.0f, 0.0f, 45.0f, 44.0f); 

    [customButtonView setBackgroundImage: 
     [UIImage imageNamed:@"bgNavBarButton-OutsideRight-Normal.png"] 
     forState:UIControlStateNormal]; 
    [customButtonView setBackgroundImage: 
     [UIImage imageNamed:@"bgNavBarButton-OutsideRight-Highlighted.png"] 
     forState:UIControlStateHighlighted]; 

    [customButtonView setImage: 
     [UIImage imageNamed:@"bgNavBarButton-Add-Normal.png"] 
     forState:UIControlStateNormal]; 
    [customButtonView setImage: 
     [UIImage imageNamed:@"bgNavBarButton-Add-Highlighted.png"] 
     forState:UIControlStateHighlighted]; 

    [customButtonView addTarget:target action:action 
     forControlEvents:UIControlEventTouchUpInside]; 

    UIBarButtonItem *customButtonItem = [[[UIBarButtonItem alloc] 
     initWithCustomView:customButtonView] autorelease]; 
    [customButtonView setImageEdgeInsets:UIEdgeInsetsMake(0.0f, 10.0f, 0.0f, 0.0f)]; 

    //customButtonItem.imageInsets = UIEdgeInsetsMake(0.0f, 10.0f, 0.0f, 0.0f); 

    return customButtonItem;  
} 
+0

+1: Tôi đã gặp sự cố này và đã thử một số thứ .. bao gồm insets và chỉ tạo hình ảnh ở -10 ở vị trí x và vv..không có may mắn vì vậy tôi chỉ giữ phần đệm nhỏ và làm lại hình ảnh để làm cho nó phù hợp hơn. chúc may mắn. –

Trả lời

82

55 Như đã nhận xét ở trên, giải pháp tôi đã thực hiện dựa trên câu trả lời này cho một câu hỏi khác, nhưng rất liên quan: How to adjust UIToolBar left and right padding. Nó cũng được hỗ trợ bởi (và phụ thuộc vào) iOS5, cho phép bạn thiết lập nhiều nút ở bên trái hoặc bên phải, thay vì chỉ một.

Dưới đây là một ví dụ về cách loại bỏ các padding bên trái của một mục nút tùy chỉnh trái:

UIBarButtonItem *backButtonItem // Assume this exists, filled with our custom view 

// Create a negative spacer to go to the left of our custom back button, 
// and pull it right to the edge: 
UIBarButtonItem *negativeSpacer = [[UIBarButtonItem alloc] 
    initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace 
    target:nil action:nil]; 
negativeSpacer.width = -5; 
// Note: We use 5 above b/c that's how many pixels of padding iOS seems to add 

// Add the two buttons together on the left: 
self.navigationItem.leftBarButtonItems = [NSArray 
    arrayWithObjects:negativeSpacer, backButtonItem, nil]; 

Và với điều này, padding trái cho nút mục thanh bên trái trong một thanh điều hướng, đã biến mất!

LƯU Ý: Tính năng này đã hoạt động đối với tôi trong iOS5 và iOS6. Cho rằng iOS7 là khác nhau đáng kể (từ các bản demo công khai), những người bạn với hạt giống sớm của iOS7 nên kiểm tra nếu một cái gì đó vô tình, như hack này, thực sự sẽ tiếp tục làm việc cho bạn ngoài iOS6.

+7

Hoạt động cũng cho rightBarButtonItems mà không thay đổi thứ tự (bạn có thể bị cám dỗ để đảo ngược thứ tự của backButtonItem & negativeSpace nhưng không phải) – Martin

+0

Cảm ơn bạn vì điều này! – chourobin

+0

Thực sự cảm ơn người đàn ông này! :) –

3

Tôi đã cố gắng này và nó hoạt động :

1) Tạo lớp con UIToolbar tùy chỉnh, không thực hiện thao tác in -drawRect :, và không mờ đục và có backgroundColor = [UIColor clearColor].

2) Tạo UIBarButtonItem tùy chỉnh bằng thanh công cụ làm chế độ xem tùy chỉnh.

3) Thêm các nút của bạn vào thanh công cụ tùy chỉnh.

4) Trong thanh công cụ tùy chỉnh của bạn ghi đè lên -layoutSubviews và làm khoảng cách của riêng bạn.

+0

Một mẹo khác là bạn có thể chỉ đơn giản là làm cho thanh điều hướng bằng cách nào đó rộng hơn khung nhìn, do đó, đệm phải được cắt bớt, và nút của bạn xuất hiện ở đúng nơi! Điều này chỉ hoạt động nếu bạn quản lý trực tiếp UINavigationBar, tức là không thông qua bộ điều khiển điều hướng. –

+0

Cảm ơn Evadne. Tôi đã chuyển qua quá trình này với một giải pháp thay thế, nhưng tôi sẽ cố gắng quay lại bài đăng này để xác nhận giải pháp được đề xuất mà bạn có để tôi có thể đánh dấu nó là câu trả lời được chấp nhận. – idStar

+0

Tôi đã tìm thấy một triển khai rõ ràng hơn, có thể với iOS5. Xem câu trả lời ở đây: http://stackoverflow.com/questions/6021138/how-to-adjust-uitoolbar-left-and-right-padding/7042201#7042201 Tôi đã thử nghiệm giải pháp này và nó đã hoạt động. Hai dòng mã và ít xâm nhập nhất. – idStar

Các vấn đề liên quan