UINavigationBar自定义标题位置

时间:2011-05-13 13:19:27

标签: iphone objective-c cocoa-touch

我有自定义标题视图中定制的UINavigationBar(不同大小,背景等)。我使用此代码来实现此目的:

UIView * mainView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, kScreenHeight)];
    mainView.backgroundColor = [UIColor yellowColor];

    UINavigationBar *navBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0,0,kScreenWidth,80)];
    navBar.autoresizingMask = UIViewAutoresizingFlexibleWidth;

    UINavigationItem *currentItem = [[UINavigationItem alloc] init];
    UILabel *label = [[UILabel alloc] init];
    label.font = [UIFont fontWithName:@"Helvetica-Bold" size: 30.0];
    [label setBackgroundColor:[UIColor clearColor]];
    [label setTextColor:[UIColor whiteColor]];
    [label setText:self.title];
    [label sizeToFit];
    [currentItem setTitleView:label];
    [label release];

    [navBar pushNavigationItem:currentItem animated:NO];
    [currentItem release];

    [mainView addSubview:navBar];
    [navBar release];    

    self.view = mainView;
[mainView release];

但是,我现在的问题是,即使正确添加了自定义标题视图,它也不会与NavBar垂直居中。我缺少什么?

谢谢!

2 个答案:

答案 0 :(得分:98)

您可以在iOS 5中使用setTitleVerticalPositionAdjustment:forBarMetrics:来更改标题位置,它适用于普通标题,例如:

CGFloat verticalOffset = -4;
[[UINavigationBar appearance] setTitleVerticalPositionAdjustment:verticalOffset forBarMetrics:UIBarMetricsDefault];

答案 1 :(得分:0)

当标准UINavigationBar有44分时,您创建了高度为80分的UINavigationBar。它可能将它定位在一个44点的中心......

您可以尝试制作一个高度为80分的UIView并在其中心添加UILabel。 (未经测试,只是猜测)