在iPad iOS 6中居中呈现视图控制器时出现错误

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上不正常工作,视图无法保持居中,无论是竖屏还是横屏。

有什么解决方法吗?

谢谢!! :)


我有同样的问题,无法解决。在iOS 6之前可以正常工作。 - Chintan Patel
@Javi_576 这里到底出了什么问题?"不工作"这样的问题描述并不充分。你是说它根本没有显示出来吗? - Matt Mc
1
不,这段代码在iOS5中视图是居中的,但在iOS6中不是。 - Javi Campaña
7个回答

8

如果您移除UIModalTransitionStyleFlipHorizontal过渡样式并使用其他过渡样式,则应该可以正常工作。

看起来这是一个与UIModalTransitionStyleFlipHorizontal有关的 bug。


谢谢!这是一个错误,因为我使用了另一个 UIModalTransitionStyle,现在已经可以正常运行了! :) - Javi Campaña

3

在presentViewController:方法中使用completion:

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

这将使其与UIModalTransitionStyleFlipHorizontal兼容。

2
这是朝着正确方向迈出的一步,但模态动画在动画完成之前大小不正确。最终结果很突兀。 - Andrew Kozlik
2
在iOS6上,navCon.view.superview.bounds = CGRectMake(0, 0, kPopupsWidth, kPopupsHeight) 在presentViewController:animated:completion:之后可以使用,但在iOS7(Beta 5)上不再起作用。视图被调整大小,但未居中... 完成时有效,但动画非常丑陋! - Carlos Ricardo

1
在我理解中,使用 UIModalTransitionStyleFlipHorizontal 的唯一方法是先不带动画地呈现视图,设置中心点,然后在下一行将其解除,再以动画方式再次显示它:如下所示...
[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]; 

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;

UIModalTransitionStyleFlipHorizontal转场在iOS 6.1 beta 2上仍存在错误。 aboutSheetFrame用于避免硬编码大小。


1
问题在于您可以将父视图的框架设置为任何您想要的大小,但原点不会改变。这就是它不能保持居中的原因。
看起来苹果在iOS6中有意限制了这一点。

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视图的框架,以使内容具有正确的大小。

0

在viewDidAppear中完成它,而不是在viewDidLoad中。这样你的问题就解决了!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接