2010-03-24 8 views
10

Ich lege ein Etikett auf eine UIToolbar (per dieser Tipp: Adding a UILabel to a UIToolbar).Kann ich ein UIToolbar-Objekt zentrieren?

Aber die Symbolleiste hat eine Schaltfläche auf der linken Seite, und so flexible Räume werfen das Label aus der Mitte, wo ich es gerne wäre. Kann ich diesen Symbolleisteneintrag irgendwie zentrieren, sodass er in der Symbolleiste zentriert bleibt?

(bereits versucht, den Knopf mit einem Dummy festen Platz balancieren, keine Würfel.)

Dank!

Antwort

3

Einfachste Möglichkeit wäre, das Etikett über die Bar, in der übergeordneten Ansicht, und rechtfertigen Sie es dort.

+0

Dank anderen-Ben, das war mein Plan B. :) –

+0

EricS Methode ist überlegen und viel einfacher zu implementieren. – titaniumdecoy

+1

EricS Methode ist "statisch" und funktioniert nicht, wenn Sie die Ausrichtung ändern – Undolog

35

Fügen Sie links und rechts von Ihrem Objekt in der Mitte einen flexiblen Platzhalter hinzu, wie Sie es getan haben. Fügen Sie dann am Ende ein Leerzeichen ein und stellen Sie die Breite auf die Breite der linken Taste ein - irgendwo um 28 Pixel.

UIBarButtonItem *fixedItem = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:NULL] autorelease]; 
fixedItem.width = 28; 
+7

Dies sollte die akzeptierte Antwort sein. – titaniumdecoy

+2

Das setzt voraus, dass sich die Systemschrift niemals ändert (es hat mehrere Male) und der Benutzer wird nie eine Schriftart unterschiedlicher Größe festlegen. Es ignoriert auch Lokalisierungen des Buttons mit unterschiedlichen Breiten. –

6

Um einen Text/Titel auf einer Symbolleiste Zentrieren Sie eine einfache UILabel wie siehe unten verwenden:

UILabel *labelTitle = [[UILabel alloc] init]; 
labelTitle.font =[UIFont fontWithName:@"Helvetica-Bold" size:18]; 
labelTitle.backgroundColor = [UIColor clearColor]; 
labelTitle.textAlignment = UITextAlignmentCenter; 
labelTitle.userInteractionEnabled = NO; 
labelTitle.text = @"Your Title"; 
[labelTitle sizeToFit]; 
CGRect labelTitleFrame = labelTitle.frame; 
labelTitleFrame.size.width = self.toolbar.bounds.size.width; 
labelTitleFrame.origin.y = (self.toolbar.bounds.size.height - labelTitleFrame.size.height)/2; 
labelTitle.frame = labelTitleFrame; 
labelTitle.autoresizingMask = UIViewAutoresizingFlexibleWidth; 
// Just add UILabel like UIToolBar's subview 
[self.toolbar addSubview:labelTitle]; 
[labelTitle release]; 
labelTitle = nil; 
+0

Diese Methode funktioniert ordnungsgemäß, wenn Sie die Ausrichtung ändern und wenn linke oder rechte Balkenschaltflächen vorhanden sind – Undolog

0

Ja wir in der Symbolleiste nur stellen zwei flexible Raum eine Symbolleiste Element zentrieren kann wie:

UIBarButtonItem *flexibaleSpaceBarButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; 

toolbar.items = [NSArray arrayWithObjects:loginButton,flexibaleSpaceBarButton,toolBarLabel,flexibaleSpaceBarButton, nil];