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?
Trả lời
Tạo nhãn UILabel và sử dụng -initWithCustomView:
.
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 txtLabel
và toolBar
nên có các kích thước thích hợp .... nhưng đó là tập thể dục khác!)
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
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
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;
Bạn cũng có thể sử dụng proxy 'UIAppearance' để' setTitleTextAttributes'. – livingtech
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ế. –
tuyệt vời, cảm ơn bạn .. !!! – tesmojones
[[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];
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