Ich finde keine Möglichkeit, die Schriftgröße des Titels in einem benutzerdefinierten UIBarButtonItem festzulegen. Der einzige Weg, den ich mir vorstellen kann, besteht darin, es als ein Bild darzustellen, das ich gerne vermeiden würde. Irgendwelche anderen Vorschläge?Wie legen Sie die Schriftgröße für ein UIBarButtonItem fest?
Antwort
Erstellen Sie ein UILabel und verwenden Sie -initWithCustomView:
.
Also gebe ich den UIBarButtonItem in die UILabel und stellen Sie die Schrift normal ? Ich habe möglicherweise auch ein Problem mit Ihrer Methode, da ich den Interface Builder verwende, um das UIBarButtonItem in eine UIToolbar zu stellen. – Jim
Verwenden Sie setTextAttributes: forState: – bigkm
Als ein konkretes Beispiel dafür, was KennyTM vermuten lässt, erstellen Sie die UIBarButtonItem mit so etwas wie die folgenden (in 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];
Dann können Sie es als Text zentriert auf einem UIToolbar (zum Beispiel) hinzufügen mit den folgenden:
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]];
(natürlich, die richtige Formatierung zu erhalten, die rect
zur Initialisierung txtLabel
und toolBar
verwendet werden, sollten die richtigen Größen sein .... aber das ist eine andere Übung!)
Sie können es mit [txtLabel sizeToFit] die richtige Größe machen. Als Randnotiz bin ich mir nicht sicher, ob diese Methode den blauen Kapselhintergrund als Button-Item beibehalten wird, also müssen Sie möglicherweise einige benutzerdefinierte Grafiken damit verwenden. Aber es ist Ihre beste Wette, da Sie die Schriftgröße eines Balkenschaltknopfelements nicht wirklich festlegen können, wenn Sie es mit einem Titel initialisieren. – axiixc
Sie sollten auch die Rahmengröße der Beschriftung festlegen. In meinem Fall wurden keine Elemente angezeigt, weil sie mit der Breite und Höhe von 0 initialisiert wurden. – sprinter252
In einem einfachen Weg, einfach:
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;
Sie können den 'UIAppearance'-Proxy auch für' setTitleTextAttributes' verwenden. – livingtech
Hinweis: Der Schlüsselwert UITextAttributeFont wurde in iOS 7 nicht weiter unterstützt. Sie können stattdessen NSFontAttributeName verwenden. –
toll, danke .. !!! – 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];
Hier ist eine ähnliche Frage. http://stackoverflow.com/questions/5421121/change-font-size-via-uibarbuttonitem-in-uitextview-works-just-once – acecapades