web-dev-qa-db-ja.com

iOS8でのUIModalPresentationFormSheetのサイズ変更

UIModalPresentationFormSheetを使用してiPadでモーダルとして表示されるUIViewControllerのサイズを変更しようとしていますが、<= iOS 7で動作しましたが、iOS8では動作しません

18
Alvaro Franco

IOS 8の場合は「preferredContentSize」プロパティを設定する必要がありますが、iOS7以前の場合はsuperview.frameプロパティを設定する必要があります。

コード例:

UIViewController* modalController = [[UIViewController alloc]init];
modalController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
modalController.modalPresentationStyle =  UIModalPresentationFormSheet;

CGPoint frameSize = CGPointMake([[UIScreen mainScreen] bounds].size.width*0.95f, [[UIScreen mainScreen] bounds].size.height*0.95f);
CGRect screenRect = [[UIScreen mainScreen] bounds];
CGFloat screenWidth = screenRect.size.width;
CGFloat screenHeight = screenRect.size.height;

// Resizing for iOS 8
modalController.preferredContentSize = CGSizeMake(frameSize.x, frameSize.y); 
// Resizing for <= iOS 7
modalController.view.superview.frame = CGRectMake((screenWidth - frameSize.x)/2, (screenHeight - frameSize.y)/2, frameSize.x, frameSize.y);

UIViewController *vc = [[[[UIApplication sharedApplication] delegate] window] rootViewController];
[vc presentViewController:modalController animated:YES completion:nil];
33
Micho

これは、UIPopoverPresentationControllerとUIPresentationControllerのどちらを使用しているかによって異なります。 「preferredContentSize」プロパティを新しいコンテンツサイズに設定してみることができます(「contentSizeForViewInPopover」プロパティはiOS 8では非推奨です)。

9
kevinl

UIViewControllerのビューのサイズを変更するには、すでにUIModalPresentationFormSheetモーダル表示スタイルで表示されており、表示されている場合は、iOS8以降で使用します。

self.preferredContentSize = CGSizeMake(width, height);

[UIView animateWithDuration:0.25 animations:^{
    [self.presentationController.containerView setNeedsLayout];
    [self.presentationController.containerView layoutIfNeeded];
}];
8
bteapot