アプリのナビゲーション コントローラーの外観を次のようにカスタマイズする作業を行っています。
数時間のSO調査の後に発見したように、それを行うにはさまざまな方法があり、いくつかは本当にハックであり、いくつかはそうではありません。アプリが成長するにつれて、将来の痛みを最小限に抑える、これを達成するためのAppleに恵まれた/最もエレガントな方法を見つけることに興味があります. これまでに調べたいくつかのアプローチ:
1) [UINavigationBar の外観] で画像を適用してナビゲーション バーの背景/高さを変更したところ、問題なく動作したようです。
UIImage *navBarImage = [UIImage imageNamed:@"navigation-bar.png"];
[[UINavigationBar appearance] setBackgroundImage:navBarImage
forBarMetrics:UIBarMetricsDefault];
背景/高さの変更を実現する最も「現代的な」方法のようですが、向きの変更には耐えられない可能性が高いです。ここで改善できる点はありますか?
2)プッシュされたビューのviewDidLoadで、デフォルトの戻るボタンを次のように置き換えました
// Set the custom back button
UIImage *buttonImage = [UIImage imageNamed:@"back.png"];
//create the button and assign the image
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button setImage:buttonImage forState:UIControlStateNormal];
//set the frame of the button to the size of the image (see note below)
button.frame = CGRectMake(0, 0, buttonImage.size.width, buttonImage.size.height);
[button addTarget:self action:@selector(back) forControlEvents:UIControlEventTouchUpInside];
// offset the back button
button.contentEdgeInsets = UIEdgeInsetsMake(10, 5, -10, -5);
//create a UIBarButtonItem with the button as a custom view
UIBarButtonItem *customBarItem = [[UIBarButtonItem alloc] initWithCustomView:button];
self.navigationItem.leftBarButtonItem = customBarItem;
このソリューションにはあまり満足できません。バーのカスタマイズがナビゲーション スタック上のコントローラーに委ねられているからです。Apple docs からは、 UINavigationBar を完全にサブクラス化し、ナビゲーションコントローラーで一度だけ置き換えることを好むようです。
また、initWithNavigationBarClass:toolbarClass: メソッドを使用してナビゲーション コントローラーを初期化することにより、カスタム UINavigationBar サブクラスを指定することもできます。
それが推奨されるルートでしょうか?[UIBarButtonItem の外観] を介して UINavigationBar のデフォルトの [戻る] ボタンを置き換えることができませんでした。これは、ボタンにテキストを表示しようとしており、テキストを削除すると、ボタンがまったく表示されないためです。提案?
3)ページ タイトルは、navigationItem.titleView を介して別のビューに置き換えられる必要があります。もっと良いものはありますか?
ありがとう!