0

UINavigationBar のカスタム サブクラスを利用する UINavigationController を使用しようとしています。ただし、initWithFrame で問題が発生しています。initWithFrame が呼び出されると、寸法が出力され、幅 0.0 と高さ 0.0 が表示されます。しかし、 UINavigationBar サブクラス内の -(void) layoutSubviews で同じフレームを印刷すると、フレームは正しく設定されます。initWithFrame がゼロ サイズのフレームを受け取るのはなぜですか? これを修正するにはどうすればよいですか? UINavigationController がそれを処理する必要があるため、手動で initWithFrame などを呼び出すのは正しくないように思えます。関連するコードは次のとおりです。

AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    UINavigationController *navController = [[UINavigationController alloc] initWithNavigationBarClass:[CustomNavigationBar class] toolbarClass:nil];
    CoolViewController *vc = [[CoolViewController alloc] init];
    [navController pushViewController:vc animated:YES];
    self.window.rootViewController = navController;

    [self.window makeKeyAndVisible];

    return YES;
}

CustomNavigationBar.m

- (id)initWithFrame:(CGRect)frame
{
    if (self = [super initWithFrame:frame])
    {
        NSLog(@"initWithFrame with frame: %f, %f", frame.size.width, frame.size.height); // This prints "initWithFrame with frame: 0, 0"
    }

    return self;
}

ありがとうございました!

4

1 に答える 1

1

ナビゲーションコントローラーが実際にフレームサイズを指定された値に設定していないと思います。代わりに、ナビゲーション バーにそれを要求し、それsizeThatFits:を使用します。定義上、これを実行して に渡すことはできませんinitWithFrame:。したがって、 を組み合わせて使用​​し、 ナビゲーション バーのコンテンツを追加、サイズ変更、およびリセットするsizeThatFits:必要setFrame:があります。layoutSubviews

于 2013-06-15T07:22:58.400 に答える