我使用UINavigationItem的titleView属性来设置一个具有我想要的字体大小/颜色的自定义UILabel。下面是我的代码:
self.headerLabel = [[UILabel alloc] initWithFrame:CGRectMake(0.0, 0.0, 400.0, 44.0)];
self.headerLabel.textAlignment = UITextAlignmentCenter;
self.headerLabel.backgroundColor = [UIColor clearColor];
self.headerLabel.font = [UIFont boldSystemFontOfSize:20.0];
self.headerLabel.textColor = [UIColor colorWithRed:0.259 green:0.280 blue:0.312 alpha:1.0];
self.navigationItem.titleView = self.headerLabel;在导航栏中,我还有一个左栏按钮。结果是:文本没有正确居中。我尝试设置标签的x原点,但没有效果。
发布于 2010-06-27 03:41:24
如果您将headerLabel设置为titleView的子视图,则可以设置headerLabel的框架来控制它在titleView中的位置。
以你现在的方式,你不能控制它。我认为操作系统会根据可用的空间为你选择titleView的框架。
希望这能有所帮助!
发布于 2011-10-26 19:47:24
只需使用init并将[self.headerLabel sizeToFit]放在最后一行代码之后,就可以代替initWithFrame。
发布于 2012-03-02 05:45:30
我在应用商店中的每个应用中都使用了导航栏的自定义标题标签。我测试了许多不同的方法,到目前为止,在导航栏中使用自定义标签的最简单方法是完全忽略titleView,直接将标签插入到navigationController.view中。
使用这种方法,很容易让标题标签的框架始终与导航栏的框架相匹配--即使您使用的是具有非标准大小的自定义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中任何按钮的顶部。但是,国际海事组织,这比1)当你有一个rightBarButton时标题不能正确居中或2)如果你有一个leftBarButton标题不显示的问题要小得多。
https://stackoverflow.com/questions/3125245
复制相似问题