1

私のユニバーサル アプリは、設定画面に NIB を使用しています。iPhone と iPad の両方で同じ NIB を使用したいと考えています。

したがって、iPad では、MainViewController で UIPopoverController を使用し、設定については、単に iPhone サイズの NIB を表示して、SettingsViewController と呼ばれるものを表示します。ポップオーバーのサイズは 320x460 ポイントです。

これは問題を引き起こします。これは、iPhone バージョンではプログラムによってステータス バーの上に多くのものを描画するためです。iPad バージョンではこれは必要ありません。iPadの現状:

ここに画像の説明を入力

ご覧のとおり、「設定」タイトルの上に大きな空白があります。したがって、私が望むのは、ポップオーバー内でビューコントローラーを約20ポイント上に移動することです:

ここに画像の説明を入力

ポップオーバーは、MainViewController で次のようにインスタンス化されます。

        settingsPopoverController = [[UIPopoverController alloc] initWithContentViewController:popoverNavigationController];
        settingsPopoverController.popoverContentSize = CGSizeMake(320, 460);
        settingsPopoverController.delegate = self;
        popoverNavigationController.navigationBarHidden = YES;

SettingsViewController で、フレームを次のように設定します。

- (void)viewDidLoad
{
    self.contentSizeForViewInPopover = CGSizeMake(320, 460);
}

その後、SettingsViewController で、次のようにオフセットを作成しようとします。

- (void)viewWillLayoutSubviews
{
    // shift it up
    CGRect frame = self.view.frame;
    frame.origin.y = -20;
    [self.view setFrame:frame];
}

これにより、コンテンツが少し上に移動することはありません。どうやって行くの?

明確にするために:ポップオーバーが表示する「ビューポート」を下に移動したい。

4

1 に答える 1

-1

試してみてください:

myPopover.autoresizingMask=UIViewAutoresizingNone;

または:

myPopover.autoresizingMask=UIViewAutoresizingFlexibleHeight || UIViewAutoresizingFlexibleWidth;

-(void)viewDidLayoutSubviewsコードをメソッドに入れることもできます。この回答が役に立たなかった場合は、次の例popoverLayoutMarginsの代わりに set (property) を試してください。setFrame:

popover.popoverLayoutMargins=UIEdgeInsetsMake (
CGFloat 50, //top
CGFloat 50,//left
CGFloat 50,//bottom
CGFloat 50//right
);
于 2013-08-21T15:21:12.693 に答える