3

UITabBarControllerルートコントローラーとしてを持っているiPadアプリケーションがあります。タブの1つから、UIToolBarを含むがありUIBarButtonItemます。クリックすると、モーダルビューが起動します。

モーダルビューは、最初に起動したときに(横向きと縦向きの両方で)正しいサイズで表示されますが、デバイスを回転させると、その時点からデバイスをどれだけ回転させても、モーダルビューは画面いっぱいに拡大します。

タブバーからモーダルビューを起動しModalPresentationStyle、表示するビューにを設定しました。

FormSheetこれは、またはに設定したかどうかに関係なく、ModalViewに影響しPageSheetます。

誰かが同様の行動を経験したことがありますか?もしそうなら、どのようにそれを解決しましたか?

どうもありがとう

編集

また、4.2以降、モーダルスタイルページ/フォームシートを使用すると、モーダルビューの背後のビューが暗くなりません。ビューの表示が間違っているのでしょうか、それとも4.2の標準でしょうか。

編集2

コード:私のデフォルトUIViewControllerでは、モーダルビューを次のように表示します。

void HandleNewMsgButtonTouch(object sender, EventArgs e)
{
   PresentModalViewController(new ComposeMsgView(), true);
}

モーダルビュー自体で、LoadViewオーバーライドで次のように指定しました。

public override void LoadView()
{
   base.LoadView ();
   ...
   // initialser code related to the view
   ...
   View.AutoresizingMask = UIViewAutoresizing.None;
   ModalPresentationStyle = UIModalPresentationStyle.PageSheet;
   ModalTransitionStyle = UIModalTransitionStyle.CrossDissolve;
}

をオーバーライドしてShouldAutoRotateToInterfaceOrientation、常にtrueを返すようにしました。

フォームシート/ページシートのどちらを使用するかに関係なく、最初に起動したときに両方とも正しい幅で表示されます(横向きでも縦向きでも、PageSheetが縦向きのビューに表示されることはわかっています)が、回転すると、モーダルビューが画面全体に表示されます( ModalViewをFullScreenで表示した場合)。

4

3 に答える 3

4

コメントで述べられているように、これを試してください:

void HandleNewMsgButtonTouch(object sender, EventArgs e)
{
    UIViewController oController = new ComposeMsgView();
    oController.ModalPresentationStyle = UIModalPresentationStyle.PageSheet;
    PresentModalViewController(oController, true);
}

LoadView()は、プロパティを設定するには遅すぎます。

以前のコンテンツ:コードを投稿してください。4.2でも、ビューは確実に暗くなります。ポートレートモードでは「PageSheet」がフルスクリーンに変換されるため、間違ったコントローラーでプレゼンテーションスタイルを設定していると思います。

表示しているコントローラーではなく、modaビューに表示するコントローラーで表示スタイルを設定する必要があります。したがって、表示するコントローラーが「oToShow」で、表示元のコントローラーが「oCurrent」の場合、「oToShow」のスタイルを設定する必要があります。常に一番上に表示され、フルスクリーンになることのないFormSheetに設定してみてください。

レネ

于 2011-01-15T06:56:45.817 に答える
1

次のような別のスタイルを使用して回避できます

UIModalPresentationFullScreen:これはデフォルトのスタイルであり、名前が示すように、モーダルビューはiPhoneとまったく同じようにフルスクリーンで表示されます。

UIModalPresentationPageSheet:モーダルビューは全画面の高さを占めますが、幅はポートレートモードでは画面の幅に設定されます。これは、デバイスがポートレートモードの場合でも、全画面を占めることを意味します。ただし、ランドスケープモードでは、基になるマスタービューの一部は引き続き表示されますが、ユーザーがカバーされていないマスタービューコントローラーと対話できないため、淡色表示になります。

UIModalPresentationFormSheet:モーダルビューの幅と高さの両方が画面サイズよりも小さくなるように設定されています。モーダルビューは画面の中央に配置され、マスタービューコントローラーのカバーされていない領域は、ユーザーの操作を防ぐために淡色表示されます。モーダルビューでキーボードを使用する場合は、モーダルビューを上に移動してスペースを確保します。

UIModalPresentationCurrentContext:モーダルビューは、親マスタービューコントローラーと同じスタイルを使用して表示されます。

また、サイズと位置を調整することも忘れないでください。そうしないと、常にPageFormSheetのデフォルトサイズで表示されます。

これがアレックスに役立つことを願っています

于 2011-01-13T18:26:34.090 に答える
0
View.AutoresizingMask = UIViewAutoresizing.FlexibleWidth | UIViewAutoresizing.FlexibleHeight;
于 2010-12-21T16:33:59.587 に答える