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

Posted brave-sailor

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS - 设置导航栏之标题栏居中标题栏的背景颜色相关的知识,希望对你有一定的参考价值。

本章实现效果:
技术分享
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 - 设置导航栏之标题栏居中标题栏的背景颜色的主要内容,如果未能解决你的问题,请参考以下文章

iOS 7中导航栏的默认背景颜色是什么?

去掉导航栏分割线 和 设置导航栏的背景颜色

iOS 导航栏的属性设置

自定义iOS导航栏背景,标题和返回按钮文字颜色

SwiftUI - 设置状态栏背景颜色以与导航栏对齐

iOS hidesBarsOnSwipe 状态栏背景颜色