16

サブクラス UINavigationController を持つ UIPopoverController があります。親ビューと子ビューの両方が UITableviews です。

最初に contentSizeForViewInPopover = (320,480) で親ビューを呼び出すと、うまく機能します。

子ビューをクリックすると、ポップオーバーのサイズが contentSizeForViewInPopover = (320,780) に変更されます

親ビューに戻ると、ポップオーバーのサイズを contentSizeForViewInPopover = (320,480) に戻すことができません。ポップオーバーは (320,780) サイズのままです。

すべてを試してみましたが、何かが足りないだけです。上記のシナリオで UIPopoverControllers を使用してビューのサイズを変更する方法を知っている人はいますか?

前もって感謝します!!

4

6 に答える 6

24

ビュー コントローラのcontentSizeForViewInPopoverプロパティは、それを含む のデフォルト (初期) サイズのみを設定しますUIPopoverControllerUIPopoverControllerを任意の時点でサイズ変更するには、そのpopoverContentSizeプロパティを設定する必要があります。これは View Controller のプロパティではなくpopoverContentSize、 のプロパティであることに注意してください(そのため、おそらくポップオーバー コントローラへの参照が必要になるでしょう)。UIPopoverController

ビュー コントローラーが のトップ ビュー コントローラーになるたびにポップオーバーのサイズをリセットするには、プロトコル メソッドUINavigationControllerを使用できます。UINavigationControllerDelegate

navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    if (viewController == viewControllerToResize) {
        referenceToUIPopoverController.popoverContentSize = CGSizeMake(320,480);
    }
}
于 2010-08-02T18:37:46.620 に答える
13

私は同じ問題を抱えていましたが、上記の解決策はどれもうまくいきませんでした。しかし、彼らのアプローチを組み合わせようとする中で、私は問題を解決するために少し異なる方法を試すように促されました. これは私のために働く:

-(void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    viewController.contentSizeForViewInPopover = navigationController.topViewController.view.frame.size;
}

それぞれナビゲーション ビュー コントローラーを使用する 3 つの異なるポップオーバーがあります。このソリューションには、ポップオーバー コントローラーのいずれかへの特定の参照を作成しないため、それらすべてに対して機能するという優れた副作用がありますが、現在使用されているポップオーバー コントローラーの popoverContentSize を使用することになります。

于 2011-08-18T22:22:43.473 に答える
2

私のプロジェクトでは、ポップオーバーのサイズを動的に変更する必要がありました。

ポップオーバー コンテンツ コントローラーの元のコントローラー デリゲートを作成し、サイズが変更されるたびに呼び出されるデリゲート メソッドを実装しました。

コードは次のとおりです。誰かの役に立てば幸いです。

-(void) popover:(UIViewController*)controller didChangeSize:(CGSize)size{

    if ([controller class] == [AZViewController class]){
        if (!_popoverController){
            _popoverController = [[UIPopoverController alloc] initWithContentViewController:controller]; 
        }

        _popoverController.popoverContentSize = size;
    }
}
于 2011-05-24T09:51:46.290 に答える
1

同じ問題があったと思いますが、ビューが表示されるたびにポップオーバーでビューのサイズを設定することで解決しました。このような:

-(void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];

    self.contentSizeForViewInPopover = CGSizeMake(320、444); //独自のサイズを設定します
}

これがお役に立てば幸いです。

于 2010-06-01T14:19:10.940 に答える
0

多くのことを試した後、@chuck-k による回答は、iOS7 の UINavigationController ポップオーバーの問題を適切に解決するのに役立ちました。

これが私がしたことです:

  • UINavigationController 内の各 UIViewController について、メソッド- (CGSize)contentSizeForViewInPopover plus に表示するコンテンツ サイズを計算しますnavigationController.navigationBar.frame.size.height(常に 44 だと思います)。これらの UIViewControllers では、他のポップオーバー機能は使用しません。

  • UINavigationController を UINavigationControllerDelegate として作成する UIViewController を宣言しました

  • それからデリゲートで....

.....

- (void)navigationController:(UINavigationController *)navigationController willShowViewController: (UIViewController *)viewController animated:(BOOL)animated {

    BOOL popoverAnimation = NO;

    if ( self.myPopoverController.popoverContentSize.height < viewController.contentSizeForViewInPopover.height ) popoverAnimation = YES;

    [self.myPopoverController setPopoverContentSize:viewController.contentSizeForViewInPopover animated:popoverAnimation];
}

高さのチェックでは、現在のビュー コントローラーのポップオーバー コンテンツのサイズを、「着信」ビュー コントローラーのポップオーバー コンテンツのサイズと比較します。ポップオーバー コンテンツのサイズを大きくする場合はanimation = NOを使用します。しかし、アニメーション = NOの場合、ポップオーバーのコンテンツ サイズが小さい --> 大きい場合、ポップオーバーのサイズは予想していたサイズまで大きくなりますが、以前の小さいコンテンツ サイズよりも大きなコンテンツは表示されません...アニメーションの設定 = YESで解決されました私にとってこの問題。(私の場合は幅が固定されているため、高さのみを確認します。)

この手法を使用することで、ほとんどすべてが最終的に満足のいくものになり、これが他の人の助けになることを願っています.

于 2013-10-31T00:45:44.763 に答える