0

UINavigationBar のタイトルをカスタマイズされたフォントで表示するために、かなり標準的な iOS 5 コード (およびスタック オーバーフローで7 倍受け入れられた回答) であると考えていたものを使用しています。

しかし、iOS5 用にビルドされたアプリ (iOS5 デバイスと iOS6 デバイスの両方で実行できるようにするため) を iOS6 シミュレーターで実行すると、タイトルが省略されることがわかりました。

iOS 6.0 を実行する iOS 4 インチ Retina ディスプレイ シミュレータ

以下は、iOS 5.1 シミュレーターで実行されている同じコードです。

iOS 5.1 を実行する iOS 3.5 インチ Retinda ディスプレイ シミュレーター

明確にするために、以下は、iOS 6 で実行しようとするまで機能していた関連コードです。

#define COURIER_FONT_BOLD @"CourierNewPS-BoldMT"

- (UIFont*)navigationBarTitleFontPortrait
{
    if (!_navigationBarTitleFontPortrait)
        _navigationBarTitleFontPortrait = [UIFont fontWithName:COURIER_FONT_BOLD size:24.0];
    return _navigationBarTitleFontPortrait;
}

// …

    if ([[UINavigationBar class] respondsToSelector:@selector(appearance)])
    {
        NSDictionary* attrs = [NSDictionary dictionaryWithObjectsAndKeys:
                                            [UIColor lightGrayColor],
                                                                UITextAttributeTextShadowColor,
                                            [NSValue valueWithUIOffset:UIOffsetMake(1, 0)],
                                                                UITextAttributeTextShadowOffset,
                                            navigationBarTitleFontPortrait,
                                                                UITextAttributeFont,
                                            nil];
        [[UINavigationBar appearance] setTitleTextAttributes:attrs];
    }
4

1 に答える 1

3

上記の問題に対する2つの解決策を発見しました:

  1. .storyboard でタイトル テキストを別のサイズに設定します (私の場合、「...」と入力してから、 ;viewDidLoadを呼び出します。self.navigationItem.title = @"the GRID"

  2. viewDidLoad で、実行します[self.navigationController.navigationBar setNeedsLayout]

私は後者の方が好きです。とにかく、最初の解決策が2番目の解決策を強制すると推測しています。

この動作が iOS 5 と iOS 6 で異なる理由はわかりませんが、これにより両方で動作することができます。

于 2012-09-25T00:31:04.817 に答える