内部に2つのビューコントローラを持つUIPopoverControllerがあります。私はそうのようにそれを構築している:私は最初のポップオーバーをロードするときに、addCommentsViewControllerがcommentsViewControllerによって隠されているUIPopoverController内部の2つのコントローラ:フレームに問題があります
commentsViewController = [[CommentsViewController alloc] init];
commentsViewController.view.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
addCommentsViewController = [[AddCommentViewController alloc] init];
addCommentsViewController.view.frame = CGRectMake(0, commentsViewController.view.bounds.size.height - 200, 320, 346);
addCommentsViewController.view.backgroundColor = [UIColor darkGrayColor];
[self.view addSubview:addCommentsViewController.view];
[self.view addSubview:commentsViewController.view];
:私のcommentsPopoverControllerインサイド
CommentsPopoverController *commentsPopoverController = [[CommentsPopoverController alloc] init];
self.delegate = commentsPopoverController;
commentsPopoverController.navigationItem.title = @"Comments";
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:commentsPopoverController];
popover = [[UIPopoverController alloc] initWithContentViewController:navController];
が、私はこれを持っています。私はそれを公開すると、それは次のようになります。
をこれまでのところは良いです。私が抱えている問題は、ここから、ユーザーがデバイスを回転させたり、キーボードを表示したり、キーボードを表示したりすると、デバイスが回転して、うまくいかなくなってしまうことです。 UITableViewであるトップビューコントローラ(commentsViewController)は、向きが何であっても、キーボードが表示されているかどうかにかかわらず常に正しいことを行います。しかし、ボトムビューコントローラ(addCommentsViewController)はorigin.yを自動的に変更してトップビューコントローラの直下にとどまることはありません。
私は基本的に、トップビューコントローラの高さを常に計算して、下のビューコントローラのorigin.yを調整できるように、commentsViewControllerの直下にaddCommentsViewControllerを保持するコードをハックする必要がありました。これは、キーボードの表示/非表示状態とデバイスの向きと常に再計算のNSNotificationsを削除することを伴います。非常にハッキーで醜い。
私の質問(最終的に)は次のとおりです。これらのビューを制御する簡単な方法はありますか、それとも私がやり方でハックしたのですか?
私は今、viewDidLayoutSubviewsを調べて、それが何であるかを見ていきます。キーボードの表示/非表示については、現在NSNotificationsに既に登録しています。 viewDidLayoutSubviewsやlayoutSubviewsのテクニックを動作させることができたら、私は戻って答えを受け入れます。時間をいただきありがとうございます! –
私はviewDidLayoutSubviewsを不正行為を起こしたビューに追加してしまい、その中でアップデートを行いました。それはトリックを行ったようです。素晴らしい答えをありがとうございます。 –