追加のビューコントローラーをポップするときにポップバービューサイズを変更する方法

StackOverflow https://stackoverflow.com/questions/8306652

質問

供給されたテンプレートを使用して、ベアボーンマスター/ディテールiPadアプリケーションを作成しました。 2つのビューコントローラー(マスターと詳細)を作成します。マスタービューコントローラーの上にポップされるビュー追加ビューコントローラーを作成しました(詳細ビューに入力するセルに最終的にヒットするまで、テーブルビューをかなり掘り下げます。マスタービューコントローラーポップオーバーをロードするために以下のコードを追加しました指定された寸法に対して(以下のコードは、マスタービューコントローラーテーブルビューから選択が選択されている場合も示します):

@implementation MasterViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        self.vehicles = [[NSArray alloc] initWithObjects:@"Cars", @"Trucks", @"Boats", nil];

        self.title = @"Vehicle Type";
        self.clearsSelectionOnViewWillAppear = NO;
        self.contentSizeForViewInPopover = CGSizeMake(320.0, [vehicles count] * 52.0);
    }
    return self;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (!self.studySessionViewController)
    {
        self.secondViewController = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
    }
    [self.navigationController pushViewController:self.secondViewController animated:YES];
}

アプリケーションが最初にロードされたときにポップオーバーが選択されると、すべてが素晴らしく見えます。ただし、ユーザーがMasterViewControllerに戻ると、ポップオーバーのサイズはスタックでプッシュされた最大のビューコントローラーと同じサイズです。私は検索しました、そして、私はマスタービューコントローラークラスに次のコードを追加しました:

- (void)viewWillAppear:(BOOL)animated
{
    self.contentSizeForViewInPopover = CGSizeMake(320.0, [vehicles count] * 52.0);
    [super viewWillAppear:animated];
}

- (void)viewDidAppear:(BOOL)animated
{
    self.contentSizeForViewInPopover = CGSizeMake(320.0, [vehicles count] * 52.0);
    [super viewDidAppear:animated];
}

ただし、これは効果がありません。また、ポップオーバーが閉じられたら(回転またはUIのポップオーバーの選択のいずれか)、以前にスタックでプッシュされた最大のテーブルビューコントローラーのポップオーバーサイズはまだ保持され、上記の寸法を完全に無視します。何が足りないの?

役に立ちましたか?

解決

私はあなたの問題全体を理解できませんでしたが、あなたの問題の基盤はポップオーバーのサイズが悪いと思います。

通常、ポップオーバーサイズの問題は、 [UIViewController contentSizeForViewInPopover] 作成する前にのみ設定できます UIPopoverController 実例。これは、ポップオーバーサイズのデフォルト値です。

あなたが作成するとき UIPopoverController コントローラーをその内容としてインスタンス contentSizeForViewInPopover にコピーされます [UIPopoverController popoverContentSize] 二度と読まないでください。コンテンツで変更した場合、ポップオーバーサイズは更新されません。

すでに作成されたサイズのサイズを変更する唯一の方法 UIPopoverController インスタンスはプロパティを使用しています [UIPopoverController popoverContentSize] またはメソッド [UIPopoverController setPopoverContentSize:animated:].

他のヒント

MasterViewController自体にポップオーバーサイズを設定しようとしています。ここに問題があります。為に self.contentSizeForViewInPopover = CGSizeMake(320.0, [vehicles count] * 52.0); 詳細ViewControllerはポップオーバーがあるため、作業するには、代わりに詳細ViewControllerで使用する必要があります。ここでの基本的なアイデアは、コントローラー自体ではなく、親ビューコントローラーにサイズを設定することです。

フレームをセットアップする必要があります。

incomingCallViewController = [[IncomingCallViewController alloc]initWithNibName:@"IncomingCallViewController" bundle:nil];
            [incomingCallViewController.view setFrame:CGRectMake(400, 200, 377, 243)];

            [self.navigationController pushViewController:incomingCallViewController.view]; 

もちろん、これは私のプロジェクトの1つからのサンプルコードです。IncomingCallViewControllerを自分のクラスに置き換えて、ヘッダーで宣言します

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top