我正在使用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;
在导航栏中,我还有一个左栏按钮。结果如下:
alt text http://cl.ly/41164eec656c96e7c913/content
如您所见,文字未正确居中。我已经尝试设置标签的x原点,但这没有效果。
答案 0 :(得分:19)
代替initWithFrame
只需使用init
并在最后一行代码之后放置[self.headerLabel sizeToFit]
。
答案 1 :(得分:15)
如果你使headerLabel成为titleView的子视图,你可以设置headerLabel的框架来控制它在titleView中的位置。
你现在这样做,你没有那种控制。我认为操作系统会根据可用空间为您选择titleView的框架。
希望这有帮助!
答案 2 :(得分:3)
我在应用商店中的每个应用中都使用了自定义标题标签。我已经测试了许多不同的方法,通过远在导航栏中使用自定义标签的最简单方法是完全忽略titleView
并将标签直接插入{{1} }}
使用这种方法,即使您使用的是非标准尺寸的自定义导航栏,也很容易让标题标签的框架始终与navigationBar的框架相匹配。
navigationController.view
这种方法的一个警告是,如果您不小心并将标题设置得太长,您的标题可以流过导航栏中任何按钮的顶部。但是,IMO,这比处理问题要少得多1)当你有一个rightBarButton时标题没有正确居中或2)如果你有一个leftBarButton则标题不会出现。
答案 3 :(得分:3)
我有同样的问题;我只是通过计算标题长度并相应地设置标签框架宽度来解决这个问题。虽然这不是一个完美的,但可以管理。这是代码。
label = [[UILabel alloc] init];
label.backgroundColor = [UIColor clearColor];
label.font = [ UIFont fontWithName: @"XXII DIRTY-ARMY" size: 32.0 ];
label.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.0f];
label.textAlignment = UITextAlignmentCenter;
label.textColor =[UIColor orangeColor];
//label.text=categoryTitle;
CGFloat verticalOffset = 2;
NSString *reqSysVer = @"5.0";
NSString *currSysVer = [[UIDevice currentDevice] systemVersion];
if ([currSysVer compare:reqSysVer options:NSNumericSearch] != NSOrderedAscending)
{
if (categoryTitle.length > 8)
{
label.frame = CGRectMake(0, 0, 300, 44);
}else {
label.frame = CGRectMake(0, 0, 80, 44);
}
self.navigationItem.titleView = label;
self.navigationItem.title=label.text;
[[UINavigationBar appearance] setTitleVerticalPositionAdjustment:verticalOffset forBarMetrics:UIBarMetricsDefault];
[[UIBarButtonItem appearance] setTintColor:[UIColor newBrownLight]];
}
答案 4 :(得分:1)
只需计算所需的精确帧大小并对齐左侧:
UIFont* font = [UIFont fontWithName:@"Bitsumishi" size:20];
CGSize maximumLabelSize = CGSizeMake(296,9999);
CGSize expectedLabelSize = [title sizeWithFont:font constrainedToSize:maximumLabelSize lineBreakMode:UILineBreakModeCharacterWrap];
CGRect frame = CGRectMake(0, 0, expectedLabelSize.width, expectedLabelSize.height);
UILabel *label = [[[UILabel alloc] initWithFrame:frame] autorelease];
label.font = font;
label.textAlignment = UITextAlignmentLeft;
label.text = title;
self.titleView = label;
答案 5 :(得分:0)
UIView *vw = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 40)];
UILabel *lbl = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 320, 40)];
lbl.text = @"Home";
lbl.textAlignment = UITextAlignmentCenter;
lbl.backgroundColor = [UIColor clearColor];
lbl.textColor = [UIColor whiteColor];
lbl.font = [UIFont fontWithName:@"HelveticaNeue-Bold" size:20];
lbl.shadowColor = [UIColor blackColor];
lbl.shadowOffset = CGSizeMake(0,1);
self.navigationItem.titleView = vw;
[self.navigationItem.titleView addSubview:lbl];
答案 6 :(得分:0)
对我有用的是在viewDidAppear方法中更新titleView框架。
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
UIView *titleView = self.navigationItem.titleView;
CGRect navBarFrame = self.navigationController.navigationBar.frame;
[titleView setFrame:CGRectMake((CGRectGetWidth(navBarFrame) - TitleWidth) / 2, (CGRectGetHeight(navBarFrame) - TitleHeight) / 2, TitleWidth, TitleHeight)];
}