我在应用商店中的每个应用中都为导航栏使用了自定义标题标签。我已经测试了许多不同的方法,到目前为止,在导航栏中使用自定义标签的最简单方法是完全忽略titleView
并将标签直接插入到navigationController.view
.
使用这种方法,很容易让标题标签的框架始终与导航栏的框架匹配——即使您使用的是非标准尺寸的自定义导航栏。
- (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;
}
这种方法的一个警告是,如果您不小心并将标题设置得太长,您的标题可能会溢出导航栏中的任何按钮的顶部。但是,IMO,与 1) 当你有一个 rightBarButton 时标题没有正确居中或 2) 如果你有一个 leftBarButton 标题没有出现,那么处理起来的问题要小得多。