これは少しばかげているように見えるので、私はおそらくここで何か間違ったことをしています。
すべてのページで同じであるカスタムtitleView(UILabelの形式)をUINavigationControllerに設定しています。これを容易にするために、ラベルを正しく表示する関数をアプリデリゲートに作成しました。次に、ナビゲーションスタックにプッシュした直後に、サブビューでこの関数を呼び出します。
これがコードです(おそらく私の説明よりも理にかなっています):
//In MyAppDelegate.m:
- (void)showTitleForNavigationController:(UINavigationController*) navController {
UILabel *label = [[UILabel alloc] init];
// set up label attributes
// ...
[label sizeToFit]; //without this line my label won't show at all
[navController.navigationBar.topItem setTitleView:label];
[label release];
}
// In SomeViewController.m, when pushing another controller onto the stack:
UIViewController *otherViewController = //initialize other view controller;
[self.navigationController pushViewController:otherViewController animated:YES];
[(MyAppDelegate*)[[UIApplication sharedApplication] delegate] showTitleForNavigationController:otherViewController.navigationController];
私の問題は、次のView Controllerをスタックにプッシュし、新しいコントローラーがスムーズにスライドすると、アニメーションの全期間中、ラベルが左上に貼り付けられ、アニメーションが終了した後に最終的に所定の位置にスナップすることです。それは本当に奇妙で醜いように見えます。次のビューからスムーズにスライドするようにラベルを適切に設定するにはどうすればよいですか?確かに私が見逃しているのは単純なことです...