Search code examples
iosobjective-cfontsuinavigationcontrolleruinavigationitem

Font size is not changed for title and subtitle in navigationItem.titleView


My goal is to use title and subtitle with different font sizes in navigation controller page title (title should be bigger, subtitle should be lower accordingly).

I found example of code to implement this. The only one problem is that font size is not applied - both title and subtitle have the same font size. Like the code for font size doesn't work.

How to fix that? Thank you

// prepare title label
UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];
titleLabel.backgroundColor = [UIColor clearColor];
titleLabel.textColor = [UIColor whiteColor];
titleLabel.font = [UIFont fontWithName:@"HelveticaNeueLight" size:19.0];
titleLabel.text = locationInfo;
[titleLabel sizeToFit];

// prepare subtitle label
UILabel *subtitleLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 18, 0, 0)];
subtitleLabel.backgroundColor = [UIColor clearColor];
subtitleLabel.textColor = [UIColor whiteColor];
subtitleLabel.font = [UIFont fontWithName:@"HelveticaNeueLight" size:12.0];
subtitleLabel.text = dateInfo;
[subtitleLabel sizeToFit];

UIView *twoLineTitleView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, MAX(subtitleLabel.frame.size.width, titleLabel.frame.size.width), 30)];
[twoLineTitleView addSubview:titleLabel];
[twoLineTitleView addSubview:subtitleLabel];

float widthDiff = subtitleLabel.frame.size.width - titleLabel.frame.size.width;

if (widthDiff > 0) {
    CGRect frame = titleLabel.frame;
    frame.origin.x = widthDiff / 2;
    titleLabel.frame = CGRectIntegral(frame);
} else{
    CGRect frame = subtitleLabel.frame;
    frame.origin.x = fabs(widthDiff) / 2;
    subtitleLabel.frame = CGRectIntegral(frame);
}

self.navigationItem.titleView = twoLineTitleView;

enter image description here


Solution

  • It's with the setFont method, not .font

    [titleLabel setFont:[UIFont fontWithName:@"HelveticaNeue-Light" size:12.0]];
    

    And also you have an error in the font name:

    it's HelveticaNeue-Light