2

iPhone シミュレーターで問題なく動作する UIActionSheet があります。ユーザーが UIButton に触れると表示されます。

iPad を使用すると、UIActionSheets が UIPopupController にラップされていると思います。

iPad シミュレーターを使用して同じコードを呼び出すと、UIPopupController のような細い「線」が表示されます (通常はコントロールを指す小さな矢印が表示されます)。中身は一切見られません。

MonoTouch で iPad を使用して UIActionSheet を使用する正しい方法は何ですか? これは、私がテストしたサンプルコードの一部です - UIActionSheet の作成:

var actionSheet = new UIActionSheet () { Style = UIActionSheetStyle.BlackTranslucent };
        actionSheet.Frame = actionSheetFrame;
        actionSheet.Clicked += (s, e) => { Console.WriteLine ("Clicked on item {0}", e.ButtonIndex); };
actionSheet.AddSubview (doneButton);

次に、ボタンから次のように呼び出してアクションシートを表示しています。

btnSay.TouchUpInside += (sender, e) => {
            actionSheet.ShowFrom(tmpBtn.Frame, tmpView, false);
        };

iPad シミュレーターを使用すると、添付のスクリーンショットのようなものが表示されます。

iPad UIActionSheet の例

参考までに、iPhone シミュレーターを使用した場合の UIActionSheet は次のようになります。

iPhone UIActionSheet の例

注: このプロジェクトは、ユニバーサル シングル ビュー MonoTouch c# プロジェクトです。

ポインタやヘルプをいただければ幸いです。

4

1 に答える 1

6

最近アプリ ストアにリリースしたアプリでも同じ問題に直面しました。

iPad でを表示するUIActionSheetと、iOS は を でラップしUIActionSheetますUIPopoverView

次のコードを使用して、これが iPad かどうかを検出し、そうであれば、ポップオーバー ビューのフレームを調整しました。

const int CHROMEWIDTHLEFT = 9;
const int CHROMEWIDTHRIGHT = 8;
const int MARGIN = 50;

UIActionSheet _actionSheet;

...

if (UIDevice.CurrentDevice.UserInterfaceIdiom == UIUserInterfaceIdiom.Pad) {
    var popover = _actionSheet.Superview.Superview;
    if (popover != null)
    {
        var x = _actionSheet.Frame.X + MARGIN;
        var y = (UIScreen.MainScreen.ApplicationFrame.Height - _actionSheet.Frame.Height) / 2;
        var width = _actionSheet.Frame.Width - (MARGIN * 2);
        var height = _actionSheet.Frame.Height;

        popover.Frame = new RectangleF (x, y, width, height);
        _actionSheet.Frame = new RectangleF (x, y, width - (CHROMEWIDTHLEFT + CHROMEWIDTHRIGHT), height - (CHROMEWIDTHLEFT + CHROMEWIDTHRIGHT));
    }
}

この例は、こちらの Xamarin ActionSheet Date Picker に基づいています。

これらをGist (Normal および DatePicker)として掲載しました。

于 2012-11-11T01:35:00.410 に答える