有这样一个需求,就是一个页面的顶部title需要是两行,上边是产品名称,下边是产品code,并且名称和code是不同的字号

查看UINavigationItem的关于title的接口和属性:

其中,title已经不能满足我的需求了,就用titleView

开始我的布局是用masonry布局的,制作了一个容器view,其中放了两个UIlabel,用masonry布局,但是容器view并没有布局,在iPhoneX的模拟器上是可以的,显示都征程,但是在真机上显示不出来,于是我做了如下:

           UIView *titleView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width-80, 44)];
            titleView.backgroundColor = [UIColor clearColor];
            
            UILabel *topLabel = [[UILabel alloc] init];
            topLabel.text = self.navigationItem.title;
            topLabel.font = kFT4;
            topLabel.textColor = kCL1;
            topLabel.numberOfLines = 1;
            
            UILabel *bottomLabel = [[UILabel alloc] init];
            bottomLabel.font = kFT0;
            bottomLabel.textColor = kCL1;
            bottomLabel.text = self.code;
            
            [titleView addSubview:topLabel];
            [titleView addSubview:bottomLabel];
            
            [topLabel mas_makeConstraints:^(MASConstraintMaker *make) {
                make.centerX.equalTo(titleView);
                make.top.equalTo(titleView).offset(3);
            }];
            [bottomLabel mas_makeConstraints:^(MASConstraintMaker *make) {
                make.centerX.equalTo(titleView);
                make.top.equalTo(topLabel.mas_bottom);
                make.bottom.equalTo(titleView).offset(-3);
            }];
            
            self.navigationItem.titleView = titleView;
关键是:

UIView *titleView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width-80, 44)];

其中减去的80,是给UINavigationItem的left和right留的位置

问题解决了!

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐