追加のビューコントローラーをポップするときにポップバービューサイズを変更する方法
-
25-10-2019 - |
質問
供給されたテンプレートを使用して、ベアボーンマスター/ディテール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を自分のクラスに置き換えて、ヘッダーで宣言します