2012-03-28 17 views
7

私はUINavigationBarのTitleViewに追加するラベルを垂直方向にセンタリングすることはあまりありません。下のように見えます。ラベルをUINavigationBarに垂直にセンタリングするTitleView

Text not vertically aligned

これは私がラベルを追加している方法です:

UILabel *titleLabel = [[UILabel alloc] init]; 
titleLabel.text = NSLocalizedString(@"activeSessionsTitle",@""); 
titleLabel.font = [Util SETTING_NEO_HEADER_FONT]; 
titleLabel.textColor = [UIColor whiteColor]; 
titleLabel.backgroundColor = [UIColor clearColor]; 
titleLabel.textAlignment = UITextAlignmentCenter; 
titleLabel.shadowColor = [UIColor colorWithRed:0.0f/255.0f green:0.0f/255.0f blue:0.0f/255.0f alpha:0.25f]; 
titleLabel.shadowOffset = CGSizeMake(0.0f, -1.0f); 
[titleLabel sizeToFit]; 

super.navigationItem.titleView = titleLabel; 

私はそれがこれをやっている理由は、私が使用している実際のフォントとの奇妙な何かがあると思う - と私は、ボタンなどの内部で多くの位置を変更する必要がありました。私はどこでも問題を解決することができましたが、ナビゲーションバーです。

+0

この記事を参照してくださいhttp://stackoverflow.com/a/8475788/716216 –

答えて

11

として、あなたのラベル表示の枠を設定することができ

私は答えの左RPMと私の質問のコメントの一つの組み合わせを使用して終了。これは、最終的には私のためにそれを固定するものである:

UIView *customTitleView = [[UIView alloc] init]; 
UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(0.0f, 3.0f, 200.0f, 30.0f)]; 
titleLabel.text = titleString; 
titleLabel.font = [Util SETTING_NEO_HEADER_FONT]; 
titleLabel.textColor = [UIColor whiteColor]; 
titleLabel.backgroundColor = [UIColor clearColor]; 
titleLabel.textAlignment = UITextAlignmentCenter; 
titleLabel.shadowColor = [UIColor colorWithRed:0.0f/255.0f green:0.0f/255.0f blue:0.0f/255.0f alpha:0.25f]; 
titleLabel.shadowOffset = CGSizeMake(0.0f, -1.0f); 
[titleLabel sizeToFit]; 

customTitleView.frame = CGRectMake(self.navigationItem.titleView.frame.size.width/2 - titleLabel.frame.size.width/2, self.navigationItem.titleView.frame.size.height/2 - titleLabel.frame.size.height/2, titleLabel.frame.size.width, titleLabel.frame.size.height); 

[customTitleView addSubview:titleLabel]; 
[titleLabel release]; 

[self.navigationItem setTitleView:customTitleView]; 
[customTitleView release]; 

あなたはこのコードのチャンクを使用している場合は、タイトルラベルのinitWithFrameの「y」の値をプレイしている場合があります呼び出します。私はそれを3.0fに設定しましたが、あなた自身の用法のためにそれを少し調整しなければならないかもしれません。

他の解決策が私のために働いていないように見える理由は、私が1つのバーボタン(左または右)を持っているかどうかによって、横方向に外れてしまうことです。バーのボタンがない場合は問題なく、2つのボタンがあれば問題ありませんでした。しかし、1つは、それがオフセンターになる原因になります。

+0

iOSが5未満ですが、iOS 5以降では外観APIを持っていますので、萌えの答え。 – bandejapaisa

1

これはあなたのフォントとは関係ないと思います。私もtitleViewを使用しています。私はそれが奇妙な方法でビューをレイアウトし、ビューのサイズが何であるかを考慮しないと思います。あなたはまた、このような

titleLabel.frame = CGRectMake(self.navigationItem.titleView.frame.size.width/2 - titleLabel.frame.size.width/2, self.navigationItem.titleView.frame.size.height/2 - titleLabel.frame.size.height/2, titleLabel.frame.size.width, titleLabel.frame.size.height); 

self.navigationItem.titleView = titleLabel; 
+0

これは、違いを確認していないようでした - 私は別の方法であなたの答えを使用していたが! – Hosemeyer

+0

ああ、はい - それをスーパービューに追加し、それをタイトルビューとして割り当てる必要があります。申し訳ありません - 私は以前にそれを話していたはずです。私もそれを知っていた:( – RPM

+0

実際にtitleLabelとは何ですか? –

28

古い質問を公開しましたが、これは非常に便利だとわかりました。あなたが使用することをUIFontに応じて、

時には
[[UINavigationBar appearance] setTitleTextAttributes: 
     [NSDictionary dictionaryWithObjectsAndKeys: 
      [UIColor redColor], 
      UITextAttributeTextColor, 
      [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.8], 
      UITextAttributeTextShadowColor, 
      [NSValue valueWithUIOffset:UIOffsetMake(0, -1)], 
      UITextAttributeTextShadowOffset, 
      [UIFont fontWithName:@"HelveticaNeue" size:25.0f], 
      UITextAttributeFont, 
      nil]]; 

タイトルビュー:

のiOS 5は、カスタムUIViewのを必要とせずにタイトルバーのタイトルビューを変更するための偉大である[UINavigationBar appearance]を使用することができます垂直にオフにする。

これを修正するには、使用することができます。

[self.navigationBar setTitleVerticalPositionAdjustment:(float) forBarMetrics:UIBarMetricsDefault]; 

(float)がダウンtitleViewをプッシュする正の値、およびtitleViewアップをプッシュする負の値です。

こちらがお役に立てば幸いです。

+7

また、UINavigationBarの外観を使用して垂直位置の調整を設定することもできます: '[[UINavigationBar appearance] setTitleVerticalPositionAdjustment:(float)forBarMetrics:UIBarMetricsDefault];' –

+2

あなたはちょうど私の首を救った!私のupvoteを取る! :) – nburk

+0

あなたは大歓迎です。 :) – Moe

0
UINavigationBar.appearance().titleTextAttributes = [NSFontAttributeName:UIFont(name:"Exo2-Bold", size: 18) as! AnyObject,NSForegroundColorAttributeName:UIColor.whiteColor()] 
+1

OPが求めていたものではありません。 – Cesare

関連する問題