2010-09-11 18 views
9

Tôi có một UIViewController thiết lập để hiển thị một thông tin-nút ở bên phải trong UINavigationItem của nó như thế này:nút thông tin rightBarButtonItem, không có khoảng trống ở bên phải

UIButton *infoButton = [UIButton buttonWithType:UIButtonTypeInfoLight]; 
[infoButton addTarget:self action:@selector(toggleAboutView) forControlEvents:UIControlEventTouchUpInside]; 
self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] initWithCustomView:infoButton] autorelease]; 

Đó hoạt động hoàn hảo, nhưng vấn đề duy nhất là tôi là trái với ít hoặc không có không gian để các bên phải của nút, trông khá xấu xí:

Infobutton

có cách nào cho nút để di chuyển khoảng 5 px ra từ phía bên phải?

Cảm ơn.

+0

Dường như có khoảng cách đúng cách với tôi. Nhìn vào các ứng dụng iPhone khác đặt một nút ở phía bên phải của thanh điều hướng: Tin nhắn, Lịch, Danh bạ, Bản đồ, v.v., tất cả đều cách nhau giống nhau. –

+1

Khách hàng của tôi muốn nó được tiếp tục hơn và khoảng cách này trông không tốt bằng nút thông tin. – Emil

+0

Tôi sử dụng cùng một nút trên thanh điều hướng, nhưng ở bên trái thay vì phải, sử dụng khoảng cách mặc định. Nó trông ổn đối với tôi. Nếu khách hàng của bạn muốn nó đưa ra nhiều hơn, hãy hỏi tại sao họ muốn ứng dụng của họ trông hoàn toàn khác với tất cả các ứng dụng khác sử dụng nút thông tin trong thanh điều hướng. –

Trả lời

17
infoButton.contentEdgeInsets = UIEdgeInsetsMake(0, -10, 0, 10); 
14

Thử đặt thông tinButton.contentEdgeInsets (hoặc imageEdgeInsets); một cái gì đó như

infoButton.contentEdgeInsets = (UIEdgeInsets){.right=10}; 

Tôi không chắc nó có hoạt động cho các nút "hệ thống" hay không.

Nếu cách đó không hiệu quả, cách dễ nhất có thể là dán nó vào trong UIView.

CHỈNH SỬA: Có lẽ các thanh công cụ gọi [customView sizeThatFits:blah] để tìm hiểu mức độ lớn của chế độ xem "muốn trở thành". Đoạn mã trên được cho là có nghĩa là "thêm một cạnh bên phải 10 pixel", cho nút bình thường (tùy chỉnh) cũng làm cho kích thước lớn hơn 10 pixel.

Dường như UIButton trả về kích thước cố định cho nút thông tin tiêu chuẩn, bỏ qua mọi loại insets. Mã của bạn "hoạt động" bằng cách ảnh hưởng đến các phương thức contentRectForBounds: và imageRectForContentRect: thay đổi nơi biểu tượng được vẽ, nhưng không thực sự thay đổi kích thước của nút. Tôi nghi ngờ rằng các biểu tượng được vẽ bên ngoài nút, có thể có nghĩa là "touchable" rect là sai (nhưng thanh công cụ dường như tăng rects cảm ứng cho UIBarButtonItems bình thường, vì vậy có lẽ nó không quan trọng).

+0

Hah, đã hoạt động! Tôi không biết tại sao, nhưng nó hoạt động. Chăm sóc để giải thích cho tôi? – Emil

+3

EDIT: Mã này đã không làm tất cả, tôi đã phải thêm này: \t 'infoButton.contentEdgeInsets = (UIEdgeInsets) {. Left = -10};' là tốt, hoặc nút sẽ chỉ được ép từ bên phải. – Emil

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