6

iOS 5 では正しく動作します:

PinRequiredViewController *pinView = [[PinRequiredViewController alloc]initWithNibName:@"PinRequiredView" bundle:nil];

            UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:pinView];

            // show the navigation controller modally
            navController.modalPresentationStyle = UIModalPresentationFormSheet;
            navController.modalInPopover = NO;
            navController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;

            [self presentViewController:navController animated:YES completion:nil];

            navController.view.superview.frame = CGRectMake(0, 0, 250, 250);

            navController.view.superview.center = self.view.window.center;

しかし、iOS6 では正常に動作しません。ポートレートとランドスケープの両方で、ビューが画面の中央に表示されません。解決策はありますか?

ありがとう!!:)

4

7 に答える 7

8

UIModalTransitionStyleFlipHorizontalトランジション スタイルを削除して、代わりに他のトランジション スタイルのいずれかを使用するとうまくいくと思います。

のバグのようUIModalTransitionStyleFlipHorizontalです。

于 2012-10-01T12:37:09.410 に答える
3

補完を使用してください: あなたの presentViewController で:

[self presentViewController:navController animated:YES completion:^{
        navController.view.superview.bounds = CGRectMake(0, 0, 250, 250);}];

これで動作するようになりUIModalTransitionStyleFlipHorizontalます。

于 2012-10-19T11:10:23.113 に答える
1

問題は、スーパービューのフレームを好きなように設定できますが、原点は変更されないことです。それが中心にとどまらない理由です。

AppleがiOS6でこれを意図的に制限したようです

于 2012-09-26T14:35:18.700 に答える
1

UIModalTransitionStyleFlipHorizo​​ntalでの私の理解では、唯一の方法は、最初にアニメーションなしでビューを表示し、中心点を設定し、その後、次の行でそれを閉じて、animated:yesで再度表示することです。以下のように.....

[self presentViewController:navController animated:NO completion:nil];

CGPoint centerPoint = CGPointMake([[UIScreen mainScreen] bounds].size.width/2, [[UIScreen mainScreen] bounds].size.height/2);
navController.view.superview.center = centerPoint;
[navController dismissModalViewControllerAnimated:NO];

navController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentViewController:navController animated:YES completion:nil]; 
于 2012-12-14T11:45:32.207 に答える
1

私は以下で成功しました:

aboutViewController.modalPresentationStyle = UIModalPresentationFormSheet;
aboutViewController.modalTransitionStyle = UIModalTransitionStyleCoverVertical;

CGRect aboutSheetFrame = aboutViewController.view.frame;
[self presentViewController:aboutViewController animated:YES completion:^{
        aboutViewController.view.superview.bounds = aboutSheetFrame;
        }];
aboutViewController.view.superview.bounds = aboutSheetFrame;

UIModalTransitionStyleFlipHorizontaliOS 6.1 ベータ 2 では、トランジション の使用にはまだバグがあります。aboutSheetFrameこれは、サイズのハードコーディングを避けるためです。

于 2012-12-19T12:32:48.073 に答える
0

iOS 7 の場合、これを試してください:

[self.navigationController presentViewController:navigationController animated:YES completion:^{
    //Make the modal bigger than normal
    navigationController.view.superview.bounds = CGRectMake(0, 0, 700, 650);
}];

アニメーションは見栄えが悪いので、アニメーションを追加して改善することをお勧めします。

[self.navigationController presentViewController:navigationController animated:YES completion:^{
    [UIView animateWithDuration:0.3 delay:0 options:UIViewAnimationOptionCurveEaseIn animations:^{
        //Make the modal bigger than normal
        navigationController.view.superview.bounds = CGRectMake(0, 0, 700, 650);
    } completion:^(BOOL finished) {
    }];
}];

また、コンテンツを正しいサイズにするには、viewDidAppear で navigationControllers ビューのフレームを設定する必要があることにも注意してください。

于 2014-01-23T15:08:27.710 に答える
0

viewDidLoad の代わりに viewDidAppear で実行してください。そして、あなたはソートされています!

于 2012-11-23T14:36:06.180 に答える