0

对于同步屏幕,我在 ios5 上制作了 ModalViewController。我使用了这段代码:

    synchViewController = [[SynchViewController alloc] initWithNibName:@"SynchViewController" bundle:nil];
    synchViewController.modalPresentationStyle = UIModalPresentationFormSheet;

    [self presentModalViewController:synchViewController animated:YES];

    synchViewController.view.superview.frame = CGRectMake(0,0,SYNCHVIEW_WIDTH,SYNCHVIEW_HEIGHT);

    CGRect screenBounds = [[UIScreen mainScreen] bounds];
    CGPoint center = CGPointMake(CGRectGetMidX(screenBounds), CGRectGetMidY(screenBounds));
    synchViewController.view.superview.center = CGPointMake(center.y, center.x);

控制器是在 xib 文件中设计的。该代码有效。

现在在 ios6 下,presentModalViewController 已贬值。我更改了方法,但现在模态视图控制器完全移位并且大小错误。

我怎样才能拥有像我设计的 xib 布局大小的 iMessage 登录屏幕?

编辑:它适用于此代码:synchViewController = [[SynchViewController alloc] initWithNibName:@"SynchViewController" bundle:nil];

    synchViewController.modalPresentationStyle = UIModalPresentationFormSheet;
    synchViewController.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
    [self presentViewController:synchViewController animated:YES completion:nil];
    synchViewController.view.superview.autoresizingMask = UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin;
    synchViewController.view.superview.frame = CGRectMake(0,0,
                                                     SYNCHVIEW_WIDTH,// Width
                                                     SYNCHVIEW_HEIGHT// Height
                                                     );


    synchViewController.view.superview.bounds = CGRectMake(0, 0, SYNCHVIEW_WIDTH, SYNCHVIEW_HEIGHT);
    CGRect screenBounds = [[UIScreen mainScreen] bounds];
    CGPoint center = CGPointMake(CGRectGetMidX(screenBounds), CGRectGetMidY(screenBounds));
    synchViewController.view.superview.center = CGPointMake(center.y, center.x);

但只有当我将动画设置为 YES 时。当我试图在没有动画的情况下加载它时,它又完全移位了,为什么?

4

1 回答 1

1

您想通过以下代码实现什么?

synchViewController.view.superview.frame = CGRectMake(0,0,SYNCHVIEW_WIDTH,SYNCHVIEW_HEIGHT);
...
synchViewController.view.superview.center = CGPointMake(center.y, center.x);

模态(显示的)控制器的大小和位置由定义modalPresentationStyle并尝试更改它永远不会可靠地工作。

如果您想要不同大小的呈现控制器,则必须自己编写控制器(作为子视图控制器),将其插入视图层次结构并阻止呈现控制器上的用户交互。

但是,我强烈建议只使用具有默认大小的本机模态控制器。

于 2012-11-30T12:13:51.757 回答