无法在横向中定位模态框架,但在纵向中可以

Posted

技术标签:

【中文标题】无法在横向中定位模态框架,但在纵向中可以【英文标题】:Can't position a modal frame in landscape but okay in portrait 【发布时间】:2013-11-11 23:46:58 【问题描述】:

我有一个试图以模态方式呈现的视图控制器。我需要将其移动到屏幕上的特定位置。下面的代码在纵向上可以正常工作,但在横向上,无论我将中心设置在哪一点,视图都不会重新定位。如果我使用 pcvc.landscapeView.center 而不是 pcvc.landscapeView 视图会重新定位,但灰色框仍保留在视图的原始位置,并且我无法与视图交互。

在横向时,我需要如何区别对待视图控制器?

PostCommentViewController *pcvc = [[PostCommentViewController alloc] initWithNibName:@"PostCommentViewController" bundle:nil];
pcvc.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
pcvc.modalPresentationStyle = UIModalPresentationFormSheet;
[self presentViewController:(UIViewController *)pcvc animated:YES completion:nil];
if (UIInterfaceOrientationIsPortrait(self.interfaceOrientation))

    pcvc.portraitView.superview.frame = CGRectMake(0, 0, 750, 143);
    pcvc.portraitView.superview.center = CGPointMake(384, 680);

else

    pcvc.landscapeView.superview.frame = CGRectMake(0, 0, 683, 300);
    pcvc.landscapeView.superview.center = CGPointMake(500, 60);

【问题讨论】:

为什么要使用 2 个视图? 它们是不同的布局但执行相同的功能,这是必要的。 【参考方案1】:

这小段代码我真的无能为力。 您正在加载名为 PostCommentViewController 的 xib 文件 该 xib 文件有 2 个视图 portraitViewlandscapeView 并且您尝试移动超级视图,以便包含 portraitViewlandscapeView 的视图。

我不明白,但作为一个快速修复,你可以为不同的布局制作不同的 xib。 同样,我没有您的视图控制器层次结构,因此很难提供帮助。

在 didrotate 中调用它

-(void)changeOrientation 
    UIDeviceOrientation orientation = [UIDevice currentDevice].orientation;
    if (orientation == UIDeviceOrientationPortrait || orientation == UIDeviceOrientationPortraitUpsideDown) 
        [[NSBundle mainBundle] loadNibNamed:@"Portrait" owner:self options:nil];
    
    else 
        [[NSBundle mainBundle] loadNibNamed:@"Landscape" owner:self options:nil];
    


【讨论】:

以上是关于无法在横向中定位模态框架,但在纵向中可以的主要内容,如果未能解决你的问题,请参考以下文章

模态视图的 Ipad 方向问题

iPad 模态视图关闭更改父视图方向

iPad 模态视图控制器以纵向动作,即使它是横向的

横向模式下的导航控制器堆栈,但总是以纵向帧大小模态呈现视图控制器视图

iOS 6 中的模态视图控制器强制横向方向

更改方向后iOS8无法重新调整模态表单的大小