2

私のプロジェクトには本当に奇妙なバグがあります。私はUIScrollViewを私の大きな、大きな視点として持っています。その中にはUIViewControllerUITableViewControllerではない)のインスタンス変数とその他のUIButtonsがあります。ビューコントローラのビューフレームをCGRectMake(0, 64, 320, 388)に設定しました。上にタブバーが表示されています(まだ機能していません)。最初はうまくいきましたが、modalViewControllerを表示して却下したら(UIViewControllerを再読み込みします)、UIViewControllerのビューを画面の上部にプッシュします(デフォルトではCGRectMake(0, 0, 320, 460)に設定されていますが私はwantsFullScreenLayoutNOに設定して、それが今CGRectMake(0, 0, 320, 388)に設定しますUIViewController自体がviewWillAppearとviewDidAppearの間でサイズ変更されていますか?

私はviewWillAppearviewDidAppearの間のどこかに、この問題を追跡してきました。ここに私の正確なログがmodalViewControllerを却下した後、次のとおりです。。

2011- 05-06 11:08:39.974キャンパス[1570:207]フレームは0.000000,64.000000,320.000000,388.000です000(viewWillAppear)
2011-05-06 11:08:40.378キャンパス[1570:207]フレームは0.000000、0.000000、320.000000、388.000000(viewDidAppear)

あなたが見ることができるように、フレームがで罰金ですではなく、viewDidAppearにあります。

私はそれを修正しようとする、次のことをやった:
- 、loadViewで所望のフレームを設定しviewDidLoadviewWillAppear、およびviewDidAppear
- wantsFullScreenLayoutNOに設定してください。
- 私のメソッドオーバーライドで私の[super viewWillAppear:][super viewDidAppear:]呼び出しを殺しました。

どうすればいいですか?!?!?

+0

誰がモーダルビューコントローラを提示していますか? – diatrevolo

+0

自分自身のサイズを変更しているUIViewController – aopsfan

答えて

0

私の問題は、iOS 4の時点で、Appleはウィンドウごとに1つのビューコントローラしかサポートしていなかったことです。しかし、iOS 5の時点で、Appleはコンテナビューコントローラのサポートを追加しており、方法はUIViewControlleraddChildViewController:など)に追加されています。コンテナビューコントローラのアルゴリズムを使用して私の問題を解決しました。詳細はUIViewController Class Referenceをご覧ください。

EDIT:クラスリファレンスで検索するのが面倒あなたのそれらの「コンテナビューコントローラ」のために、ここではクラス参照の関連セクションの要点だ:

カスタムのUIViewControllerのサブクラスもとして機能することができますコンテナビュー コントローラ。コンテナビューコントローラは、自身が所有する他のビューコントローラ( ビューコントローラとも呼ばれます)の内容を の内容で管理します。子ビューはそのまま、またはコンテナビューコントローラが所有するビューと組み合わせて に表示できます。

コンテナビューコントローラのサブクラスは、公開する インターフェイスを宣言して、その子を関連付けます。これらのメソッドの性質は であり、作成するコンテナのセマンティクスに依存します。 ビュー コントローラで一度に表示される子の数、それらの子が表示された回数、および表示コントローラのビュー階層に表示される の数を決定する必要があります。あなたのビューコントローラ クラスは、もしあればどんな関係が子どもによって共有されるかを定義します。 コンテナのクリーンなパブリックインターフェイスを確立することで、 子どもがその機能を論理的に使用するようにします。 コンテナが ビヘイビアをどのように実装するかに関する詳細があまりにも多くアクセスされることはありません。

コンテナビューコントローラは、ビュー階層に子のルートビューを追加する前に、子ビューコントローラ を自身に関連付けなければなりません。 これにより、iOSはイベントを子ビューコントローラに適切にルーティングし、 ビューはそれらのコントローラを管理できます。同様に、ビューの階層から子のルートビュー を削除した後は、それ自身の子ビューコントローラ を切断する必要があります。これらの アソシエーションを作成または中断するには、コンテナは 基本クラスによって定義された特定のメソッドを呼び出します。これらのメソッドは、コンテナクラス のクライアントから呼び出されることを意図していません。彼らはあなたのコンテナの 実装によってのみ使用され、期待される包含動作を提供します。

+1

この問題を修正するにはどうすればいいですか? –

+0

答えを示すコードサンプルを提供してください!膨大なUIViewControllerクラスへのリンクは誰にも役立ちません。 –

+0

@TRedman 1年前から私のコードは大きく変わってしまったので、有用なコードサンプルを与えることはできないと思います。私はクラス参照の一部を編集で引用しました – aopsfan

関連する問題