私は基本的に、DetailViewController で PageViewController を使用するマスター/ディテール スタイルのアプリを持っています。PageViewController には 3 つの異なるシーンがあります。現在のシーンに応じてrightBarButtonItems
、3 つのそれぞれに異なる設定をしています。2 つのシーンには rightBarButtonItem が 1 つしかありませんが、1 つのシーンでは 2 つが使用されています。
ユーザーがあるページから次のページに完全にスクロールする場合、問題はありません。ただし、ユーザーが rightBarButton アイテムの方向に途中までしかスクロールせず、画面がポップ バックすると、バー ボタン アイテムの 1 つだけが表示されます。
Appleのドキュメントによると:
配列内のすべてのアイテムを表示する十分なスペースがない場合、タイトル ビュー (存在する場合) またはバーの左側のボタンに重なるアイテムは表示されません。
これは何が起こっているのかを説明しています。ビューがボタンをロードするとき、ボタンに使用できるフレーム サイズのチェックを実行する必要があります。コントローラーは、ボタンがタイトルに重なることを認識し、タイトルを削除します。ボタンが表示されるか、この性質の何かを遅らせる必要があるだけです。これを克服する方法についてのアイデアはありますか?
のviewDidLoadでボタンを宣言する方法は次のとおりですDetailViewController
//Generate buttons
barButton = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil];
[barButton setImage:[UIImage imageNamed:@"arrow-up.png"]];
barButton2 = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil];
[barButton2 setImage:[UIImage imageNamed:@"arrow-down.png"]];
次に、ボタンが必要な viewController に渡され、 に表示されviewDidAppear
ます。
- (void) viewDidAppear:(BOOL)animated
{
//downButton and upButton are set from barButton and barButton2 which were created in the `DetailViewController`
[upButton setTarget:self];
[downButton setTarget:self];
[downButton setAction:@selector(action1)];
[upButton setAction:@selector(action2)];
navItem.rightBarButtonItems = @[downButton, upButton];
}
前後の画像をいくつか示します