导航栏标题对齐问题 [英] Navigationbar title alignment issue
问题描述
我将自定义视图设置为导航栏titleView,当页面是第一个视图时,控制器标题在中心正确显示
I have set custom view as navigation bar titleView, when page is first view controller title is shown correctly in center
但是当从另一个视图控制器推出视图控制器时,控制器标题将转移到右侧
but when view controller is pushed from another view controller title is shifted to right
代码:
-(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;
}
任何人都可以帮我纠正这个问题吗?
Can anyone help me in correcting this ?
Github链接: https://github.com/iamabhiee/NavigationTitleDemo
Github link : https://github.com/iamabhiee/NavigationTitleDemo
推荐答案
这是一个解决方法,它可能很有用,想法是使用UILabel作为 titleView
。这样您就不必手动计算和调整其框架,它将自动由系统居中。代码中的范围是硬编码的。 navigationItem
的
Here is a workaround, it may be useful, the idea is to use a UILabel as the titleView
of the navigationItem
. This way you don't have to manually calculate and adjust its frame, it will automatically centered by the system. The range in the code is hardcoded though.
// 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;
这篇关于导航栏标题对齐问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!