3

サブクラス化UINavigationBarして、でカスタム描画を実行できるようにしますdrawRect:

これが私のコードです:

ナビゲーションコントローラー(.h)

@interface CORENavigationController : UINavigationController

@property (strong, nonatomic) CORENavigationBar *customNavigationBar;

@end

ナビゲーションコントローラー(.m)

@implementation CORENavigationController

@synthesize customNavigationBar = _customNavigationBar;

- (UINavigationBar *)navigationBar {
    if (![self customNavigationBar]) {
        [self setCustomNavigationBar:[[CORENavigationBar alloc] init]];
    }
    return [self customNavigationBar];
}

ナビゲーションバー(.h)

@interface CORENavigationBar : UINavigationBar

@end

ナビゲーションバー(.m)

@implementation CORENavigationBar

- (void)drawRect:(CGRect)rect
{
    [super drawRect:rect];
}

問題は、ナビゲーションバーにタイトルがないことです。たとえば、私が見ることができるのは、標準の青い背景だけです。

次のメソッドを削除するとすぐに、タイトルが戻ってきます。

- (UINavigationBar *)navigationBar {
    if (![self customNavigationBar]) {
        [self setCustomNavigationBar:[[CORENavigationBar alloc] init]];
    }
    return [self customNavigationBar];
}

タイトルが消えるのはなぜですか?super私は'sと呼び、drawRect:他には何も変更しません。

ありがとう!

4

1 に答える 1

3

それを見つけた!答えは次のとおりです。

https://stackoverflow.com/a/9610801/1306956

この場合、次のようになります。

[navigationController setValue:[[CORENavigationBar alloc] init] forKeyPath:@"navigationBar"];

iOS 5.1.1 (9B206) でテスト済み。魅力のように機能します。

于 2012-05-26T11:47:20.480 に答える