UIModalPresentationFormSheet
of modalPresentationStyle
を使用するときにビューのサイズを変更する方法について知りたいのですが、サイズが固定されているように見えるので、誰かがポップアップを操作できたかどうか疑問に思いましたサイジングの観点からの眺め。
したがって、ビューサイズが固定されたUIModalPresentationFormSheet
またはフルビューのいずれかがあり、その間に何かがあります。
MyModalViewController *targetController = [[[MyModalViewController alloc] init] autorelease];
targetController.modalPresentationStyle = UIModalPresentationFormSheet;
targetController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentModalViewController:targetController animated:YES];
// it is important to do this after presentModalViewController:animated:
targetController.view.superview.bounds = CGRectMake(0, 0, 200, 200);
モーダルビューのフレームは、表示後に調整できます。
XCode 4.62を使用してiOS 5.1-6.1でテスト済み
MyModalViewController *targetController = [[[MyModalViewController alloc] init] autorelease];
targetController.modalPresentationStyle = UIModalPresentationFormSheet;
targetController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; //transition shouldn't matter
[self presentModalViewController:targetController animated:YES];
targetController.view.superview.frame = CGRectMake(0, 0, 200, 200);//it's important to do this after presentModalViewController
targetController.view.superview.center = GPointMake(roundf(self.view.center.x), roundf(self.view.center.y));//self.view assumes the base view is doing the launching, if not you might need self.view.superview.center etc.
更新推奨されるiOS 6.0 View Controllerの表示方法も正しく機能します。
- (void)presentViewController:(UIViewController *)viewControllerToPresent animated:(BOOL)flag completion:(void (^)(void))completion
IOS 8以前の作品では:
AboutViewController * _aboutViewController = [[AboutViewController alloc] init];
_aboutViewController.modalPresentationStyle = UIModalPresentationFormSheet;
if(IS_IOS8)
{
_aboutViewController.preferredContentSize = CGSizeMake(300, 300);
}
[self presentViewController:_aboutViewController animated:YES completion:nil];
AboutViewController.mで
- (void)viewWillLayoutSubviews{
[super viewWillLayoutSubviews];
if(!IS_IOS8)
{
self.view.superview.bounds = CGRectMake(0, 0, 300, 300);
}
}
IS_IOS8
#define IS_IOS8 ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8)
IOS 8では、より多くのカスタマイズオプションを提供するUIPresentationControllerを使用することもできます。
IOS 8の場合、各View Controllerにデリゲートメソッド(CGSize)preferredContentSizeを実装するだけです。すべてのサイズの問題を解決する必要があります。
Fatosソリューションの範囲(素晴らしいもの)alloc initWithNibNameの後に.xibファイルを使用してView Controllerを作成している場合、ビューフレームを保存できます。
CGRect myFrame = targetController.view.frame;
...
targetController.view.superview.bounds = myFrame;
そして、それをsuperview.boundsに使用します。したがって、.xib内のビューのサイズが使用され、より視覚的にサイズを変更できます。