アプリストアにあるすべてのアプリで、ナビゲーションバーにカスタムタイトルラベルを使用しました。私はこれを行うためのさまざまな方法をテストしました。ナビゲーションバーでカスタムラベルを使用する最も簡単な方法は、ラベルを完全に無視titleView
してに直接挿入することnavigationController.view
です。
このアプローチでは、非標準サイズのカスタムnavBarを使用している場合でも、タイトルラベルのフレームを常にnavigationBarのフレームと一致させるのは簡単です。
- (void)viewDidLoad {
[self.navigationController.view addSubview:self.titleLabel];
[super viewDidLoad];
}
- (BOOL)shouldAutorotateToInterfaceOrientation:
(UIInterfaceOrientation)interfaceOrientation {
return YES;
}
- (void)didRotateFromInterfaceOrientation:
(UIInterfaceOrientation)fromInterfaceOrientation {
[self frameTitleLabel];
}
- (UILabel *) titleLabel {
if (!titleLabel) {
titleLabel = [[UILabel alloc]
initWithFrame:self.navigationController.navigationBar.frame];
titleLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:18];
titleLabel.text = NSLocalizedString(@"Custom Title", nil);
titleLabel.textAlignment = UITextAlignmentCenter;
titleLabel.lineBreakMode = UILineBreakModeTailTruncation;
}
return titleLabel;
}
- (void) frameTitleLabel {
self.titleLabel.frame = self.navigationController.navigationBar.frame;
}
このアプローチの1つの注意点は、注意せずにタイトルを長すぎるように設定すると、ナビゲーションバーにあるボタンの上にタイトルが流れてしまう可能性があることです。ただし、IMOは、1)rightBarButtonがある場合にタイトルが正しく中央に配置されない、または2)leftBarButtonがある場合にタイトルが表示されない場合よりも、処理の問題がはるかに少なくなります。