美文网首页
iOS - 设置导航栏之标题栏居中、标题栏的背景颜色

iOS - 设置导航栏之标题栏居中、标题栏的背景颜色

作者: Mr_Bob_ | 来源:发表于2016-09-20 18:14 被阅读1572次
    本章实现效果:
    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;
    

    相关文章

      网友评论

          本文标题:iOS - 设置导航栏之标题栏居中、标题栏的背景颜色

          本文链接:https://www.haomeiwen.com/subject/pjuoettx.html