1

そこで、iOS アプリケーションを構築していて、UINavigationBar をカスタマイズして、デフォルトのサイズよりも高くしました。ただし、いくつかの問題が発生しました。

  1. 私のコンテンツは、UINavigationBar がデフォルトの高さであるかのように機能します。これにより、y=0 にあるすべてのビューが、より背の高い UINavigationBar によって実際に非表示または部分的に非表示になります。ビューを正しいオフセットの下に手動で配置する必要がありますが、これはそれほど大きな問題ではありませんが、誰かがこれを修正する方法を見つけたかどうかに興味があります. 基本的に、私の UINavigationBar は、より大きな背景画像を持つ通常のものとして扱われています。

  2. タップされている部分が通常の UINavigationBar の典型的な 44 ピクセルの下部よりも下にある場合、UINavigationBar のビュー/ボタンはタップできません。通常の範囲内であれば問題なく動作しますが、44px マークを下回ると登録されません。繰り返しますが、私の UINavigationBar は、アプリケーションによって通常の高さで背景画像が大きいものとして扱われているようです。これは、私が本当に解決しなければならない、はるかに重大な問題です。

私の UINavigationBar を変更するコードは次のとおりです。

[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"navBarBackground_iPhone.png"] forBarMetrics:UIBarMetricsDefault];
[self.navController.navigationBar setBackgroundColor:[UIColor whiteColor]];
[self.navController.navigationBar setFrame:CGRectMake(0, 0, self.frame.size.width, 72)];

-makeKeyAndVisibleこれは、UINavigationController が割り当てられ、ルート ビュー コントローラーで初期化された後に、メイン ウィンドウで実行されます。背景画像は幅 320px、高さ 72px (@2x バージョンでは 2 倍) です。

ご覧のとおり、ここで UINavigationBar の高さを設定しようとしましたが、コードのこの部分の後では固着していないようです。44pxに戻ります。

UINavigationBar をサブクラス化しようとして失敗しました。どんな助けでも大歓迎です。

4

2 に答える 2

0

このメソッドを UINavigationBar のサブクラスに追加します。

- (void)layoutSubviews {
    [super layoutSubviews];
    CGRect barFrame = self.frame;
    barFrame.size.height = heightYouWant;
    self.frame = barFrame;
}
于 2013-02-09T20:03:02.990 に答える
0

UINavigationBar をサブクラス化し、次のメソッドをオーバーライドしてみてください。

 - (void)drawRect:(CGRect)rect
 {
    int heightYouWant = 100;

    UIImage *image = [UIImage imageNamed:@"title_bar_bg.png"];
    [image drawInRect:CGRectMake(0, 0, self.frame.size.width, heightYouWant)];

    self.tintColor = [UIColor colorWithRed:1/255.0 green:62/255.0 blue:130/255.0 alpha:1];
}
于 2013-02-08T17:12:56.057 に答える