2010-04-27 5 views
32

Я не могу найти способ установить размер шрифта заголовка в пользовательском UIBarButtonItem. Единственный способ, которым я могу думать обо всем этом, - установить его как образ, которого я бы хотел избежать. Любые другие предложения?Как установить размер шрифта на UIBarButtonItem?

+0

Вот подобный вопрос. http://stackoverflow.com/questions/5421121/change-font-size-via-uibarbuttonitem-in-uitextview-works-just-once – acecapades

ответ

3

Создайте UILabel и используйте -initWithCustomView:.

+0

Так что я передаю UIBarButtonItem в UILabel и установить шрифт нормально ? У меня также может быть проблема с вашим методом, потому что я использую Interface Builder, чтобы поместить UIBarButtonItem в UIToolbar. – Jim

+1

use setTextAttributes: forState: – bigkm

2

В качестве конкретного примера того, что предлагает KennyTM, вы создаете UIBarButtonItem что-то вроде следующего (в коде):

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]; 

Затем, вы можете добавить его в качестве центрирования текста на UIToolbar (например) со следующим:

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]]; 

(конечно, чтобы получить правильное форматирование, то rect используется для инициализации txtLabel и toolBar должны быть правильные размеры .... но это еще одно упражнение!)

+1

Вы можете сделать правильный размер, используя [txtLabel sizeToFit]. В качестве побочного примечания я не уверен, что этот метод сохранит синий фон с капсулой на элемент кнопки, поэтому вам, возможно, придется использовать с ним какую-то пользовательскую графику. Но это ваш лучший выбор, поскольку вы не можете установить размер шрифта элемента панели, если вы его инициализируете заголовком. – axiixc

+0

Вы также должны установить размер рамки на этикетке. В моем случае нет элементов, которые отображаются, потому что они инициализируются с шириной и высотой 0. – sprinter252

78

В легкий путь, просто:

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

Вы также можете использовать прокси 'UIAppearance' для' setTitleTextAttributes'. – livingtech

+4

Незначительное примечание: значение ключа UITextAttributeFont устарело в iOS 7, вместо этого вы можете использовать NSFontAttributeName. –

+0

большой, спасибо .. !!! – 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];