2013-08-20 8 views
5

Ich versuche, zwei UILabels in meiner Navigationsleiste zu haben, anstatt nur eines.ios Titel und Untertitel in der Navigationsleiste zentriert

folgte ich diesen Link Informationen zu haben, wie das zu tun: iPhone Title and Subtitle in Navigation Bar

Es funktioniert gut, aber ich kann meine Texte zentriert werden nicht richtig gehen. Es befindet sich in der Mitte zwischen den Schaltflächen, aber das Standardtitelverhalten besteht darin, sich genau unter der Zeit zu zentrieren.

enter image description here

Ich hatte einen Blick hier, gleiche Frage, aber keine Antwort: UINavigationBar TitleView with subtitle

Was bin ich? Hier ist mein Code:

CGRect headerTitleSubtitleFrame = CGRectMake(0, 0, 200, 44); 
UIView* _headerTitleSubtitleView = [[UILabel alloc] initWithFrame:headerTitleSubtitleFrame]; 
_headerTitleSubtitleView.backgroundColor = [UIColor clearColor]; 
_headerTitleSubtitleView.autoresizesSubviews = NO; 

CGRect titleFrame = CGRectMake(0, 2, 200, 24); 
UILabel *titleView = [[UILabel alloc] initWithFrame:titleFrame]; 
titleView.backgroundColor = [UIColor clearColor]; 
titleView.font = [UIFont boldSystemFontOfSize:20]; 
titleView.textAlignment = NSTextAlignmentCenter; 
titleView.textColor = [UIColor whiteColor]; 
titleView.shadowColor = [UIColor darkGrayColor]; 
titleView.shadowOffset = CGSizeMake(0, -1); 
titleView.text = @"Title"; 
titleView.adjustsFontSizeToFitWidth = YES; 
[_headerTitleSubtitleView addSubview:titleView]; 

CGRect subtitleFrame = CGRectMake(0, 24, 200, 44-24); 
UILabel *subtitleView = [[UILabel alloc] initWithFrame:subtitleFrame]; 
subtitleView.backgroundColor = [UIColor clearColor]; 
subtitleView.font = [UIFont boldSystemFontOfSize:13]; 
subtitleView.textAlignment = NSTextAlignmentCenter; 
subtitleView.textColor = [UIColor whiteColor]; 
subtitleView.shadowColor = [UIColor darkGrayColor]; 
subtitleView.shadowOffset = CGSizeMake(0, -1); 
subtitleView.text = @"Subtitle"; 
subtitleView.adjustsFontSizeToFitWidth = YES; 
[_headerTitleSubtitleView addSubview:subtitleView]; 

self.navigationItem.titleView = _headerTitleSubtitleView; 

Antwort

10

Sie sollten die Breite der beiden Rahmen anzupassen. Es sollte unter 200 liegen.

CGRect titleFrame = CGRectMake(0, 2, 160, 24); 
CGRect subtitleFrame = CGRectMake(0, 24, 160, 44-24); 

Bearbeiten: Ihre Schaltfläche auf der linken Seite ist breiter, und die Titelansicht wird nach rechts verschoben.

Bitte sehen Sie das Bild mit einer Breite 200px enter image description here

und das Bild mit einer Breite 160px enter image description here

Ich schlage vor, Sie die Breite von Titleview anzupassen und entsprechend zu kennzeichnen.

Wenn Sie mehr über die Breite der Rücktaste wissen möchten, dann beziehen Sie sich bitte auf die Diskussion hier. SO Post 1.

SO Post 2.

+0

Vielen Dank! Es funktioniert jetzt. Aber ich verstehe es nicht. Warum ist es nicht zentriert, wenn gegebene Dimensionen höher sind? – user2700551

+0

Es funktioniert nicht für alle Fälle. Obwohl es für diese Zurück-Taste funktioniert, kann meine Zurück-Taste auf der linken Seite breiter sein und der Titel wird nach rechts verschoben. – user2700551

+0

Immer wird der Text auf dem Etikett zentriert. Daher sollten Sie die Etikettenbreite entsprechend anpassen. Wenn Hintergrundfarbe für das Etikett zum Testen gesetzt wird, dann erhalten Sie die klare Vorstellung. Es wird auch sehr bemerkenswert sein, wenn Sie die Antwort annehmen und verbessern können, da sie Ihnen geholfen hat. –

1

Sie in UINavigationItem Klasse mögen diese Eigenschaft kann.

@property (nonatmic,copy) NSString *prompt

Es ist elegant.

+3

Aber das erhöht die Höhe der gesamten Navbar. Und es ist oben auf dem Titel, nicht darunter. –