Here is what I do
UIImageView *logoImage = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, desired_image_width, desired_image_height)];
// if you need to resize the image to fit the UIImageView frame
logoImage.contentMode = UIViewContentModeScaleAspectFit;
// no extension name needed for image_name
[logoImage setImage:[UIImage imageNamed:@"image_name"]];
UIView *logoView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, logoImage.frame.size.width, logoImage.frame.size.height)];
[logoView addSubview:logoImage];
self.navigationItem.titleView = logoView;
You may notice that I add the UIImageView instance to an UIView instance before setting the navigationItem's titleView. You may set the UIImageView instance to navigationItem's titleView directly, but the logo will be off center when you navigate to the next page and you still want to show the logo with the back button. The navigation bar will automatically put the UIView in the center, but UIImageView (although UIImageView is a subclass of UIView, I just don't know why).