Как вы устанавливаете размер шрифта на UIBarButtonItem? - PullRequest
35 голосов
/ 27 апреля 2010

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

Ответы [ 4 ]

78 голосов
/ 08 июля 2012

Просто, просто:

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;
3 голосов
/ 27 апреля 2010

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

2 голосов
/ 03 февраля 2015
[[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];
2 голосов
/ 11 марта 2012

В качестве конкретного примера того, что предлагает 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, должны быть правильного размера .... но это еще одно упражнение!)

...