Я не могу найти способ установить размер шрифта заголовка в пользовательском UIBarButtonItem. Единственный способ, которым я могу думать обо всем этом, - установить его как образ, которого я бы хотел избежать. Любые другие предложения?Как установить размер шрифта на UIBarButtonItem?
ответ
Создайте UILabel и используйте -initWithCustomView:
.
В качестве конкретного примера того, что предлагает 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
должны быть правильные размеры .... но это еще одно упражнение!)
Вы можете сделать правильный размер, используя [txtLabel sizeToFit]. В качестве побочного примечания я не уверен, что этот метод сохранит синий фон с капсулой на элемент кнопки, поэтому вам, возможно, придется использовать с ним какую-то пользовательскую графику. Но это ваш лучший выбор, поскольку вы не можете установить размер шрифта элемента панели, если вы его инициализируете заголовком. – axiixc
Вы также должны установить размер рамки на этикетке. В моем случае нет элементов, которые отображаются, потому что они инициализируются с шириной и высотой 0. – sprinter252
В легкий путь, просто:
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;
Вы также можете использовать прокси 'UIAppearance' для' setTitleTextAttributes'. – livingtech
Незначительное примечание: значение ключа UITextAttributeFont устарело в iOS 7, вместо этого вы можете использовать NSFontAttributeName. –
большой, спасибо .. !!! – 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];
Вот подобный вопрос. http://stackoverflow.com/questions/5421121/change-font-size-via-uibarbuttonitem-in-uitextview-works-just-once – acecapades