zoukankan      html  css  js  c++  java
  • 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;
  • 相关阅读:
    火车票起售时间
    java基础知识
    java运行
    123
    1233
    那些不能错过的XCode插件
    那些不能错过的XCode插件
    如何正确的在Android中存储特定应用文件
    如何正确的在Android中存储特定应用文件
    问题解决:listview多次调用addHeaderView和addFooterView
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/7053863.html
Copyright © 2011-2022 走看看