本章实现效果:
Untitled.gif
前言:
项目中很多需求是要求自定义标题栏居中的,本人最近就遇到这中需求,如果用系统自带的titleView设置的话,不会居中,经过尝试,发现titleview的起点位置和尺寸依赖于leftBarButtonItem和rightBarButtonItem的位置。下面给出我的解决方案
首先自定义一个标题View
#import <UIKit/UIKit.h>@interface CustomTitleView : UIView @property (nonatomic, copy) NSString *title; @end #import "CustomTitleView.h" #import "Masonry.h" @interface CustomTitleView () @property(nonatomic,strong)UILabel * titleLabel;//标题label @property (nonatomic,strong) UIView *contentView; @end @implementation CustomTitleView - (instancetype)init { self = [super init]; if (self) { [self addSubview:self.contentView]; [self.contentView mas_makeConstraints:^(MASConstraintMaker *make) { make.left.greaterThanOrEqualTo(self); make.right.lessThanOrEqualTo(self); make.center.equalTo(self); make.bottom.top.equalTo(self); }]; [self.contentView addSubview:self.titleLabel]; [self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.centerY.equalTo(self.contentView); make.centerX.equalTo(self.contentView); }]; } return self; } - (void)setFrame:(CGRect)frame { [super setFrame:frame]; [self layoutIfNeeded]; } - (UIView *)contentView { if (!_contentView) { _contentView = [UIView new]; } return _contentView; } -(UILabel *)titleLabel { if (!_titleLabel) { _titleLabel = [[UILabel alloc] init]; _titleLabel.textColor = [UIColor whiteColor]; _titleLabel.font = [UIFont boldSystemFontOfSize:17]; _titleLabel.lineBreakMode = NSLineBreakByTruncatingTail; _titleLabel.textAlignment = NSTextAlignmentCenter; [_titleLabel setContentCompressionResistancePriority:UILayoutPriorityDefaultLow forAxis:UILayoutConstraintAxisHorizontal]; _titleLabel.backgroundColor = [UIColor redColor]; } return _titleLabel; } - (void)setTitle:(NSString *)title { self.titleLabel.text = title; }
具体用法如下:
在当前页面的控制中只要写,即可实现上图的效果
CustomTitleView *titleView = [[CustomTitleView alloc] init];titleView.backgroundColor = [UIColor greenColor];titleView.frame = CGRectMake(0, 0, PDScreeenW, 44); titleView.title = @"我是标题"; self.navigationItem.titleView = titleView; self.titleView = titleView; UIBarButtonItem *rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:self action:nil]; self.navigationItem.rightBarButtonItem = rightBarButtonItem;