4

iOS 6 以降、アプリケーションでカスタム スタイルを使用する際にいくつかの問題が発生しました。カスタム フォントといくつかのUIAppearanceプロキシを使用します。私が理解できない問題は、UINavigationBar のタイトルのずれです。iOS 5 では、すべてが正常に機能し、正しく配置されていました。

iOS6 がリリースされ、カスタム スタイルが珍しくないので、これはバグではなく、iOS6 への新しい変更に対する私の誤解だと思います。

ずれ

UIAppearance プロキシで呼び出すテキスト配置メソッドのドキュメントを検索しましたが、そのようなメソッドを見つけることができませんでした。

次のコード行を使用して、アプリケーション全体で UINavigationBar のスタイルを設定します。

[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"NavigationBarBackground"] 
                                   forBarMetrics:UIBarMetricsDefault];

[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"NavigationBarBackground"] 
                                   forBarMetrics:UIBarMetricsLandscapePhone];

[[UINavigationBar appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
                                                      [UIColor whiteColor], UITextAttributeTextColor, 
                                                      [UIFont fontWithName:@"Corbel-Bold" size:14.0], UITextAttributeFont,
                                                      nil]];


[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil] setTintColor:[UIColor whiteColor]];
[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
                                                      [UIColor ceBlueColor], UITextAttributeTextColor,
                                                      [UIColor whiteColor], UITextAttributeTextShadowColor, 
                                                      [NSValue valueWithUIOffset:UIOffsetMake(0, 1)], UITextAttributeTextShadowOffset, 
                                                      [UIFont fontWithName:@"Corbel" size:0.0], UITextAttributeFont, 
                                                      nil]
                                            forState:UIControlStateNormal];

[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil] setBackButtonTitlePositionAdjustment:UIOffsetMake(0, -3) forBarMetrics:UIBarMetricsDefault];
4

2 に答える 2

12

ここでも同じ問題が発生しますが、ナビゲーション バーに戻るボタンまたは右のバー ボタン (テーブル編集) がある場合は発生しないことに気付きました。新しいView Controllerに移動してから最初のView Controllerに戻ると、タイトルの配置も修正されます...

私が使用しているフォントが少し小さいため、タイトルが中央の左側に少しずれているため、iOS がデフォルトのフォントに基づいてタイトルのフレームの位置を計算していると思います。

私の現在の修正はsetNeedsLayout、viewWillAppear で呼び出すことです。動作しているようです。

- (void) viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    if (self.navigationItem.hidesBackButton || self.navigationItem.rightBarButtonItem == nil) {
        [self.navigationController.navigationBar setNeedsLayout];
    }
}
于 2012-11-04T12:14:06.460 に答える
5

それが役立つ場合は、タイトルの垂直位置を(少なくとも)調整できます。

[[UINavigationBar appearance] setTitleVerticalPositionAdjustment:4 forBarMetrics:UIBarMetricsDefault];

(この質問は、この問題の解決策を見つけるのに役立ちました: UINavigationBar custom title position )

于 2013-04-09T12:13:57.760 に答える