0
-(void)reviewClicked:(id)sender
{
    ReviewViewController *newView = [[ReviewViewController alloc] init];
    newView.delegate = self;
    UINavigationController *navCon = [[UINavigationController alloc] initWithRootViewController:newView];
    [self presentModalViewController:navCon animated:YES];
}

私は splitViewController をセットアップしていますが、これがおそらくいくつかの問題を引き起こしている原因です。詳細ビュー コントローラー内に、クリックすると上記のコードを呼び出すボタンがあります。

目標は、ビューを画面の下から上にスライドさせて、ユーザーが選択内容を確認できるようにし、ボタンをクリックして元の詳細ビューに戻ることです。このコードは機能しており、モーダル ビューと元の詳細ビューの間を行き来できます。

問題は、画面を上にスライドした後、停止すべき場所を超えてスライドし続け、最終的に 10 ~ 15 ピクセル上に行きすぎて停止することです。基本的に、このモーダル ビューは非常に上にスライドするため、ビューのかなりの部分が画面の上部より上に表示されます。その間、同じ量のスペースが画面の下部にある「空の黒いスペース」であり、ビューが単に上に移動しすぎたことをさらに示唆しています.

問題を複雑にしているのは、横向きモードで問題なくスライドすることです。

問題は、なぜこのバグが発生して、モーダル ビューが画面の上部を超えてスライドしすぎているのか、誰か知っている人はいますか?

-=-=-=-=-=-=-

編集:申し訳ありませんが、その場所にnavConと入力するつもりでした。以上で直りました。

-=-=-=-=-=-=-

解決:

-(void)reviewClicked:(id)sender
{
    ReviewViewController *newView = [[ReviewViewController alloc] init];
    newView.delegate = self;
    UINavigationController *navCon = [[UINavigationController alloc] initWithRootViewController:newView];
    navCon.view.frame = CGRectMake(0, 0, 768, 1080);
    [self presentModalViewController:navCon animated:YES];
}

試行錯誤の末、実際にビューのフレームを設定したことがないことに気付きました! それと同じくらい簡単な解決策...私は .xib ファイルを含む例を実行していましたが、それらのファイルが自動的にフレームを作成したため、完全に見落としていました!

将来これを見ている人は覚えておいてください。このフレームはポートレート モード専用です。横向きモードが必要な場合は、それに応じてフレームを変更してください。

navCon.view.frame = CGRectMake(0, 0, 1080, 768);
4

1 に答える 1

0

質問に記載されているように、問題の簡単な解決策を見つけましたが。実はまだ多くの問題がありました。さらに調べたところ、appDelegate を呼び出してこれらのメソッドを呼び出しました。

[self.splitViewController presentModalViewController:navCon animated:YES];
[self.splitViewController dismissModalViewControllerAnimated:YES];

基本的に、ルートビュークラスにモーダルビューを呼び出してもらい、すべての問題を解決しました。明らかに、splitview の詳細ビュー内からモーダル ビューを呼び出すことは、ルート ビュー (たまたま splitViewController) からモーダル ビューを呼び出すことと同じではありません。これが将来誰かに役立つことを願っています。乾杯。

-=-=-=-=-=-=-=-

詳細については、私が偶然見つけたこの投稿を参照してください。

UISplitViewController - モーダル ビューのプッシュ

于 2012-05-30T15:23:58.670 に答える