导航栏标题alignment问题

我已经设置自定义视图导航栏titleView,当页面是第一个视图控制器标题正确显示在中心

正确的图像

但是当视图控制器从另一个视图控制器被推动时,标题向右移动

不正确的图像

代码:

-(void)setUpTwoLineNavigationTitle { CGFloat width = 0.95 * self.view.frame.size.width; UIView *contentView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, width, 44)]; contentView.backgroundColor = [UIColor clearColor]; CGRect titleRect = contentView.frame; titleRect.origin.y = 4; titleRect.size.height = 20; UILabel *titleView = [[UILabel alloc] initWithFrame:titleRect]; titleView.backgroundColor = [UIColor clearColor]; titleView.font = [UIFont systemFontOfSize:14.0]; titleView.textAlignment = NSTextAlignmentCenter; titleView.textColor = [UIColor blackColor]; titleView.text = @""; [contentView addSubview:titleView]; CGRect subTitleRect = contentView.frame; subTitleRect.origin.y = 24; subTitleRect.size.height = subTitleRect.size.height - 24; //CGRect subtitleFrame = CGRectMake(0, 24, 220, 44-24); UILabel *subtitleView = [[UILabel alloc] initWithFrame:subTitleRect]; subtitleView.backgroundColor = [UIColor clearColor]; subtitleView.font = [UIFont systemFontOfSize:11.0]; subtitleView.textAlignment = NSTextAlignmentCenter; subtitleView.textColor = [UIColor blackColor]; subtitleView.text = @""; [contentView addSubview:subtitleView]; contentView.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin; self.navigationItem.titleView = contentView; } 

任何人都可以帮我纠正这个问题吗?

Github链接: https : //github.com/iamabhiee/NavigationTitleDemo

这是一个解决方法,它可能是有用的,这个想法是使用UILabel作为navigationItemtitleView 。 这样,您不必手动计算和调整其框架,它将自动由系统居中。 代码中的范围是硬编码的。

 // here to create a UILabel UILabel *label = [[UILabel alloc] initWithFrame:CGRectZero]; label.backgroundColor = [UIColor clearColor]; label.textColor = [UIColor blackColor]; label.numberOfLines = 0; // set different font for title and subtitle NSMutableAttributedString * string = [[NSMutableAttributedString alloc] initWithString:@"Title\nSubTitle"]; [string addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:14.0] range:NSMakeRange(0,5)]; [string addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:11.0] range:NSMakeRange(6,8)]; // set line spacing NSMutableParagraphStyle *paragrahStyle = [[NSMutableParagraphStyle alloc] init]; [paragrahStyle setLineSpacing:6]; [paragrahStyle setAlignment:NSTextAlignmentCenter]; [string addAttribute:NSParagraphStyleAttributeName value:paragrahStyle range:NSMakeRange(0, [string length])]; label.attributedText = string; [label sizeToFit]; self.navigationItem.titleView = label;