【问题标题】:UIView in xib displays as portrait when opened in landscapexib中的UIView在横向打开时显示为纵向
【发布时间】:2014-07-09 00:40:18
【问题描述】:

我刚刚在一个使用故事板的项目中添加了一个单独的视图控制器和 xib。我使用通常的代码从另一个视图控制器中显示它:

OtherVC *othervc = [[OtherVC alloc] initWithNibName:nil bundle:nil];
[self.view addSubView: othervc.view];

在纵向时,xib 显示并在开箱后自动正确旋转。

但是当我在 iPad 已经处于横向状态时显示它时,视图的大小是纵向的并且位于左侧。

发生了什么事?似乎没有办法向视图添加约束。

谢谢!

【问题讨论】:

    标签: ios ipad uiview uiviewcontroller autolayout


    【解决方案1】:

    这不是提供单独的viewController 的正确方式。

    问题是您在实际视图上添加了一个视图..但是这个视图有一个特定的框架,当您在视图上添加它时会保持不变..在两种情况landscapeprotrait)。因此,为了理解,您应该检查方向,然后正确设置视图的框架。但正如我所说,你使用的方式是错误的。

    在您的情况下您应该使用 storyboard 中的segue

    或者,最多通过代码,但类似:

    OtherVC *othervc = [self.storyboard instantiateViewControllerWithIdentifier:@"Identifier"];
    [self presentViewController:othervc animated:YES completion:nil];
    

    其中Identifier 由右侧的检查面板在情节提要中的viewController 中设置。

    或者,如果您想说“NIB”,您应该这样做:

    OtherVC *othervc = [[OtherVC alloc] initWithNibName:@"yourNibName" bundle:[NSBundle mainBundle]]; //Or your correct bundle but i guess will be this.
    [self presentViewController:othervc animated:YES completion:nil];
    

    因此,在此之后,如果您确定在项目中设置了两个方向,您的视图将是横向的。

    现在您将使用AutoLayout 或不使用 AutoLayout 的普通掩码规则来管理视图上的元素。

    【讨论】:

    • 我认为您应该更新答案以使用 xib 文件以符合 OP 当前的情况。您可以在处理实际事实后提供多个“更好”的建议(这表明 OP 正在使用 xib 文件和情节提要)。
    • 如果他使用故事板,他应该使用SEGUE。但我认为他使用的是单独的 NIB 而不是 XIB。但无论如何,我建议正确的操作方式同时也为他提出解决方案。但同样,我鼓励改变方式并以正确的方式实施。
    • 感谢您的回答。是的,我可以按照你建议的方式来做,但是我添加的视图控制器有一个半透明的背景视图,如果我使用 segue 或 presentViewController,它们都会删除我不想要的原始背景视图.我原来的方式,通过透明视图显示背景,除了方向问题外工作正常。
    • 所以你可以按照我的第一个建议。在添加新视图之前,您应该检查方向是横向还是纵向,并正确设置新视图的框架。
    • 根据我的预期用途,我可以看到这不是要走的路。我将改为使用自定义警报视图。再次感谢。
    猜你喜欢
    • 2012-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多