ぎじゅつめもブログ

主にアプリ開発の技術メモを残していきます。

【Objective-C】UINavigationBarのタイトルを画像にする

UINavigationBarにUIImageViewを設定したいときのメモです。
(環境:xcode5, iOS7.1)

// タイトルに貼付けたいイメージ
UIImage* image = [UIImage imageNamed:imageName];

// イメージのサイズを調節
CGSize viewSize = CGSizeMake(image.size.width, image.size.height);
CGFloat imageHeight = 30;
CGSize titleImageSize = CGSizeMake(viewSize.width * (imageHeight / viewSize.height), imageHeight);

// UIImageViewをつくる
UIImageView* titleImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, titleImageSize.width, imageHeight)];
titleImageView.backgroundColor = [UIColor clearColor];
titleImageView.image = [UIImage imageNamed:image];
[titleImageView setContentMode:UIViewContentModeScaleAspectFit];

// UIImageViewをのっけるUIViewをつくる
UIView* bgView = [[UIView alloc] initWithFrame:titleImageView.frame];
bgView.backgroundColor = [UIColor clearColor];
[bgView addSubview:titleImageView];

//UINavigationBarのタイトルに設定。selfはViewControllerです。
self.navigationItem.titleView = bgView;

ポイントはUIImageViewを一旦UIViewに追加してから、
そのUIViewをナビゲーションバーのタイトルへ設定していることです。
僕の場合、UIImageViewを直接「self.navigationItem.titleView」へ設定していたので、サイズが自動調整されてしまって、
navigationBarの両端にボタンを設定しているときタイトルが真ん中にいかなくて困っていました。

以上です。