2010-04-27 9 views
32

Nie mogę znaleźć sposobu na ustawienie rozmiaru czcionki tytułu w niestandardowym obiekcie UIBarButtonItem. Jedynym sposobem, w jaki mogę to obejść, jest ustawienie go jako obrazu, którego chciałbym uniknąć. Jakieś inne sugestie?Jak ustawić rozmiar czcionki na UIBarButtonItem?

+0

Oto podobne pytanie. http://stackoverflow.com/questions/5421121/change-font-size-via-uibarbuttonitem-in-uitextview-works-just-once – acecapades

Odpowiedz

3

Utwórz UILabel i użyj -initWithCustomView:.

+0

więc mogę zdać UIBarButtonItem do UILabel i ustawić czcionkę normalnie ? Mogę też mieć problem z twoją metodą, ponieważ używam Interface Buildera, aby umieścić UIBarButtonItem w UIToolbar. – Jim

+1

użyj setTextAttributes: forState: – bigkm

2

Jako konkretny przykład tego, co sugeruje KennyTM należy utworzyć UIBarButtonItem z czymś następnym (w kodzie):

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

Następnie, można dodać go jako wyśrodkowany tekst na UIToolbar (na przykład) z następujących powodów:

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

(oczywiście, aby uzyskać właściwą sformatowaniu, rect wykorzystywane do inicjowania txtLabel i toolBar powinny być odpowiednie rozmiary .... ale to inna ćwiczenie!)

+1

Możesz dokonać poprawnego rozmiaru używając [txtLabel sizeToFit]. Na marginesie nie jestem pewien, czy ta metoda zachowa niebieskie tło kapsułki jako element przycisku, więc może być konieczne użycie niestandardowej grafiki. Ale najlepiej, ponieważ nie możesz ustawić rozmiaru czcionki elementu paska, jeśli zainicjujesz go z tytułem. – axiixc

+0

Powinieneś również ustawić rozmiar klatki etykiety. W moim przypadku żadne elementy nie były wyświetlane, ponieważ zostały zainicjowane przy szerokości i wysokości 0. – sprinter252

78

W łatwy sposób, po prostu:

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

Możesz również użyć proxy 'UIAppearance' do' setTitleTextAttributes'. – livingtech

+4

Niewielka uwaga: wartość klucza UITextAttributeFont została uznana za przestarzałą w systemie iOS 7, można zamiast tego użyć nazwy NSFontAttributeName. –

+0

świetnie, dziękuję .. !!! – 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]; 
Powiązane problemy