43

を使用するときにビューのサイズを変更する方法を知りたいのですUIModalPresentationFormSheetmodalPresentationStyle、サイズが固定されているように見えるので、サイズの観点からポップアップビューを操作できたのではないかと思いました。

したがってUIModalPresentationFormSheet、固定ビューサイズまたはフルビューのいずれかがあり、その間に何かがあります。

4

6 に答える 6

71
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);
于 2011-01-31T12:18:02.683 に答える
4

モーダルビューのフレームは、表示後に調整できます。

XCode 4.62を使用して、iOS5.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.

更新推奨されるiOS6.0ViewControllerの表示方法も正しく機能します。

- (void)presentViewController:(UIViewController *)viewControllerToPresent animated:(BOOL)flag completion:(void (^)(void))completion
于 2010-11-24T20:51:07.107 に答える
4

ios8以前の作品では:

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を使用することもできます。

于 2014-09-22T07:47:52.007 に答える
3

iOS 8の場合、各View Controllerにデリゲートメソッド(CGSize)preferredContentSizeを実装するだけです。すべてのサイズの問題を解決するはずです。

于 2014-09-25T23:56:30.893 に答える
2

Fatosソリューション(素晴らしいもの)を拡張するために、alloc initWithNibNameの後に.xibファイルを使用してViewControllerを作成している場合は、ビューフレームを保存できます。

CGRect myFrame = targetController.view.frame;
...
targetController.view.superview.bounds = myFrame;

そして、それをsuperview.boundsに使用すると、.xib内のビューのサイズが使用され、サイズをより視覚的に変更できます。

于 2011-10-18T17:30:14.060 に答える
-1

このコードをフォームシートビューコントローラーに配置します。

-(void) viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    self.view.superview.bounds = CGRectMake(0, 0, 540, 500);  // your size here
}

サイズ変更は、プレゼンテーションアニメーションが正しく見えるように、十分早い段階で行われることに注意してください。

于 2012-07-22T22:43:40.490 に答える