ナビゲーションバー全体を画像で表示したいのですが。これは、ナビゲーションベースのアプリに付属するナビゲーションです。付随するUITableViewとともにRootViewControllerに表示されます。これがどのように機能するかの例をいくつか見てきました。
ナビゲーションバーのタイトルを設定します。
UIImage *image = [UIImage imageNamed:@"TableviewCellLightBlue.png"];
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
[self.navigationController.navigationBar.topItem setTitleView:imageView];
そこにある問題は、ナビゲーションバー全体ではなく、タイトルのみを対象としていることです。
このスレッドもあります: http://discussions.Apple.com/message.jspa?messageID=9254241#9254241 。最後に向かって、ソリューションは、私が使用していないタブバーを使用するように見えます。ナビゲーションバーの背景を設定するのはそれほど複雑ですか?他の簡単なテクニックはありますか?
ナビゲーションの背景を持ちながら、タイトルテキストを使用できるようにします。
あなたの場合、 この解決策は別の答えで見つかりました はうまく機能します。
UINavigationBarに「CustomImage」カテゴリを追加すると、次を呼び出すことができます。
UINavigationBar *navBar = self.navigationController.navigationBar;
UIImage *image = [UIImage imageNamed:@"yourNavBarBackground.png"];
[navBar setBackgroundImage:image];
このコードはメソッドに入れる必要があります
- (void)viewWillAppear:(BOOL)animated
カスタム画像を作成したいView Controllerのそして、その場合は、次のように呼び出す必要があります。
[navBar clearBackgroundImage]; // Clear any previously added background image
setBackgroundImageの前(それ以外の場合は複数回追加されます...)
ios 6で変更し、ios 6で使用できるようにします。
UINavigationBar *navBar = self.navigationController.navigationBar;
UIImage *image = [UIImage imageNamed:@"image.png"];
[navBar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];
UIImage *image = [UIImage imageNamed:@"YourImage.png"];
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
[self.navigationController.navigationBar addSubview:imageView];
実際には、UIView
クラスまたはサブクラスに背景画像を追加するはるかに簡単な方法があります。クラスの分類や拡張(サブクラス化)は必要なく、「必要に応じて」これを行うことができます。たとえば、View ControllerのNavigation Barに背景画像を追加するには、次の手順を実行します。
self.navigationController.navigationBar.layer.contents = (id)[UIImage
imageNamed:@"background.png"].CGImage;
Quartz Coreフレームワークをプロジェクトに追加し、これを行う必要がある場所に#import <QuartzCore/QuartzCore.h>
を追加することを忘れないでください。これは、UIView
を継承するものの描画レイヤーを変更するための、よりクリーンでシンプルな方法です。もちろん、すべてのナビゲーションバーまたはタブバーに対して同様の効果を達成したい場合、サブクラス化は理にかなっています。
UIImage *logo = [UIImage imageNamed:@"my_logo"];
UIImageView *logoView = [[UIImageView alloc]initWithImage:logo];
logoView.frame = CGRectMake(0, 0, 320, 37);
UINavigationController *searchNavCtrl = [[UINavigationController alloc] initWithRootViewController:searchViewController];
searchNavCtrl.navigationBar.barStyle = UIBarStyleBlack;
//searchNavCtrl.navigationItem.titleView = logoView;
//[searchNavCtrl.navigationController.navigationBar.topItem setTitleView:logoView];
[searchNavCtrl.navigationBar addSubview:logoView];
[logoView release];
この行を追加してください。
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"NavBar.png"] forBarMetrics:UIBarMetricsDefault];
バム! 1行で完了しました。
cmpのソリューションを使用し、ビュー内のホーム画面にカスタム背景画像のみが表示されるようにしたいので、それを削除するロジックを追加しました。
HomeViewController.m
UIImage *image = [UIImage imageNamed:@"HomeTitleBG.png"];
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
imageView.tag = 10;
UIImageView *testImgView = (UIImageView *)[self.navigationController.navigationBar viewWithTag:10];
if ( testImgView != nil )
{
NSLog(@"%s yes there is a bg image so remove it then add it so it doesn't double it", __FUNCTION__);
[testImgView removeFromSuperview];
} else {
NSLog(@"%s no there isn't a bg image so add it ", __FUNCTION__);
}
[self.navigationController.navigationBar addSubview:imageView];
[imageView release];
また、推奨されるclearBackgroundImageメソッドを使用しようとしましたが、動作させることができなかったため、画像にタグを付け、表示される他のビューコントローラーで削除しました。
OtherViewController.m
UIImageView *testImgView = (UIImageView *)[self.navigationController.navigationBar viewWithTag:10];
if ( testImgView != nil )
{
NSLog(@"%s yes there is a bg image so remove it", __FUNCTION__);
[testImgView removeFromSuperview];
}
`
view Controllerに移動してsuper viewdidloadに貼り付け、mainlogoで画像を置き換えてから、画像のロゴを設定してNavigationタイトルを設定します
- (void)viewDidLoad
{
[super viewDidLoad];
//set your image frame
UIImageView *image=[[UIImageView alloc]initWithFrame:CGRectMake(0,0,70,45)] ;
//set your image logo replace to the main-logo
[image setImage:[UIImage imageNamed:@"main-logo"]];
[self.navigationController.navigationBar.topItem setTitleView:image];
}
Appdelegateにコードを追加し、起動方法で終了しました
#define UIColorFromRGB(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]
if([[[UIDevice currentDevice] systemVersion] floatValue] < 7.0)
{
[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"navigation_or.png"] forBarMetrics:UIBarMetricsDefault];
[[UINavigationBar appearance] setTitleVerticalPositionAdjustment:0.0 forBarMetrics:UIBarMetricsDefault];
}
else
{
[[UINavigationBar appearance] setBarTintColor:UIColorFromRGB(0x067AB5)];
[[UINavigationBar appearance] setTintColor:[UIColor whiteColor]];
// Uncomment to assign a custom backgroung image
[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"navigation_or.png"] forBarMetrics:UIBarMetricsDefault];
// Uncomment to change the back indicator image
[[UINavigationBar appearance] setShadowImage:[[UIImage alloc] init]];
[[UINavigationBar appearance] setBackgroundColor:[UIColor whiteColor]];
[[UINavigationBar appearance] setBackIndicatorTransitionMaskImage:[UIImage imageNamed:@""]];
// Uncomment to change the font style of the title
NSShadow *shadow = [[NSShadow alloc] init];
shadow.shadowColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.8];
shadow.shadowOffset = CGSizeMake(0, 0);
[[UINavigationBar appearance] setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys:[UIColor colorWithRed:245.0/255.0 green:245.0/255.0 blue:245.0/255.0 alpha:1.0], NSForegroundColorAttributeName,shadow, NSShadowAttributeName,[UIFont fontWithName:@"HelveticaNeue-Bold" size:17], NSFontAttributeName, nil]];
[[UINavigationBar appearance] setTitleVerticalPositionAdjustment:0.0 forBarMetrics:UIBarMetricsDefault];
}