问题
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

Code :
-(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 link : https://github.com/iamabhiee/NavigationTitleDemo
回答1:
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;
来源:https://stackoverflow.com/questions/26903013/navigationbar-title-alignment-issue