2010-04-27 13 views
32

Tôi không thể tìm thấy cách để đặt kích thước phông chữ của tiêu đề trong UIBarButtonItem tùy chỉnh. Cách duy nhất tôi có thể nghĩ đến việc giải quyết vấn đề này là đặt nó thành hình ảnh mà tôi muốn tránh. Bất cứ một đề nghị nào khác?Làm thế nào để bạn đặt kích thước phông chữ trên UIBarButtonItem?

+0

Dưới đây là một câu hỏi tương tự. http://stackoverflow.com/questions/5421121/change-font-size-via-uibarbuttonitem-in-uitextview-works-just-once – acecapades

Trả lời

3

Tạo nhãn UILabel và sử dụng -initWithCustomView:.

+0

Vì vậy, tôi chuyển UIBarButtonItem vào UILabel và đặt phông chữ bình thường ? Tôi cũng có thể có một vấn đề với phương pháp của bạn bởi vì tôi đang sử dụng giao diện Builder để đặt UIBarButtonItem vào một UIToolbar. – Jim

+1

sử dụng setTextAttributes: forState: – bigkm

2

Là một ví dụ cụ thể về những gì KennyTM gợi ý, bạn tạo UIBarButtonItem với một cái gì đó như sau (trong code):

UILabel *txtLabel = [[UILabel alloc] initWithFrame:rect]; 
txtLabel.backgroundColor = [UIColor clearColor]; 
txtLabel.textColor = [UIColor lightGrayColor]; 
txtLabel.text = @"This is a custom label"; 
UIBarButtonItem *btnText = [[[UIBarButtonItem alloc] initWithCustomView:txtLabel] autorelease]; 

Sau đó, bạn có thể thêm nó dưới dạng văn bản tập trung vào một UIToolbar (ví dụ) như sau:

UIToolbar *toolBar = [[UIToolbar alloc] initWithFrame:rect]; 
toolBar.barStyle = UIBarStyleBlackTranslucent; 
UIBarButtonItem *flexSpace1 = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil] autorelease]; 
UIBarButtonItem *flexSpace2 = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil] autorelease]; 

[toolBar setItems:[NSArray arrayWithItems:flexSpace1, btnText, flexSpace2, nil]]; 

(tất nhiên, để có được định dạng thích hợp, các rect sử dụng để khởi tạo txtLabeltoolBar nên có các kích thước thích hợp .... nhưng đó là tập thể dục khác!)

+1

Bạn có thể đặt kích thước chính xác bằng [txtLabel sizeToFit]. Là một lưu ý phụ tôi không chắc chắn nếu phương pháp này sẽ giữ lại nền viên nang màu xanh một mục nút, vì vậy bạn có thể phải sử dụng một số đồ họa tùy chỉnh với nó. Nhưng đặt cược tốt nhất của bạn vì bạn thực sự không thể đặt kích thước phông chữ của một mục nút thanh nếu bạn khởi tạo nó với một tiêu đề. – axiixc

+0

Bạn cũng nên đặt Kích thước khung của nhãn. Trong trường hợp của tôi, không có mục nào được hiển thị vì chúng được khởi tạo với chiều rộng và chiều cao là 0. – sprinter252

78

Trong một cách dễ dàng, chỉ cần:

Objective-C:

NSUInteger fontSize = 20; 
UIFont *font = [UIFont boldSystemFontOfSize:fontSize]; 
NSDictionary *attributes = @{NSFontAttributeName: font}; 

UIBarButtonItem *item = [[UIBarButtonItem alloc] init]; 

[item setTitle:@"Some Text"]; 
[item setTitleTextAttributes:attributes forState:UIControlStateNormal]; 

self.navigationItem.rightBarButtonItem = item; 

Swift:

let fontSize:CGFloat = 20; 
let font:UIFont = UIFont.boldSystemFont(ofSize: fontSize); 
let attributes:[String : Any] = [NSFontAttributeName: font]; 

let item = UIBarButtonItem.init(); 

item.title = "Some Text"; 
item.setTitleTextAttributes(attributes, for: UIControlState.normal); 

self.navigationItem.rightBarButtonItem = item; 
+1

Bạn cũng có thể sử dụng proxy 'UIAppearance' để' setTitleTextAttributes'. – livingtech

+4

Lưu ý nhỏ: giá trị khóa UITextAttributeFont đã không được chấp nhận trong iOS 7, bạn có thể sử dụng NSFontAttributeName để thay thế. –

+0

tuyệt vời, cảm ơn bạn .. !!! – tesmojones

2
[[UIBarButtonItem appearance]setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys: 
                [UIColor colorWithRed:245.0/255.0 green:245.0/255.0 blue:245.0/255.0 alpha:1.0], NSForegroundColorAttributeName, 
                [UIFont fontWithName:@"FONT-NAME" size:21.0], NSFontAttributeName, nil] 
              forState:UIControlStateNormal];