Я использовал собственные заголовки для своих навигационных панелей в каждом приложении, которое есть в магазине приложений.Я протестировал множество различных способов сделать это, и к far самый простой способ использовать пользовательский ярлык на панели навигации - полностью игнорировать titleView
и вставить свой ярлык непосредственно в navigationController.view
. * 1005.*
При таком подходе легко, чтобы рамка метки заголовка всегда соответствовала рамке панели навигации - даже если вы используете нестандартный navBar с нестандартным размером.
- (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;
}
Единственное предупреждениев этом случае ваш заголовок может перетекать поверх любых кнопок, которые есть в navBar, если вы не будете осторожны и установите заголовок слишком длинным.Но, IMO, это гораздо менее проблематично, чем 1) Заголовок не центрируется правильно, когда у вас есть rightBarButton или 2) Заголовок не появляется, если у вас есть leftBarButton.