Search code examples
uinavigationcontrolleruilabeluinavigationbartitleuinavigationitem

UINavigationBar multi-line title


Is there a straightforward way of overriding the titleView of the current navigation bar item in a navigation bar within a navigation controller? I've tried creating a new UIView and replacing the titleView property of topView with my own UIVIew with no success.

Basically, I want a multi-line title for the navigation bar title. Any suggestions?


Solution

  • Set the titleView property of the UINavigationItem. For example, in the view controller's viewDidLoad method you could do something like:

    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 480, 44)];
    label.backgroundColor = [UIColor clearColor];
    label.numberOfLines = 2;
    label.font = [UIFont boldSystemFontOfSize: 14.0f];
    label.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.5];
    label.textAlignment = UITextAlignmentCenter;
    label.textColor = [UIColor whiteColor];
    label.text = @"This is a\nmultiline string";
    
    self.navigationItem.titleView = label;
    
    #if !__has_feature(objc_arc)
    [label release];
    #endif
    

    It shows up like this:

    multi-line titlebar label

    Remember the titleView property is ignored if leftBarButtonItem is not nil.