1

这个话题之前已经出现过(iPad modal view controller 在纵向中起作用,即使它是横向的)但是我还没有找到一个明确的答案——所以我不知道这是否是重复的。

在新的单视图项目中,我在 xcode 中将主视图设置为横向:

在此处输入图像描述

并且 Property Inspector 确认了这一点(以及视图在情节提要中的显示方式):

在此处输入图像描述

并且 ViewController 的方向属性设置为横向:

在此处输入图像描述

然而,当我在“viewDidLoad”中检查视图框架时,它会报告纵向模式:

- (void)viewDidLoad
{
    [super viewDidLoad];

    CGRect theRect = self.view.frame;

    NSLog(@" frame %f  %f  %f  %f", theRect.origin.x,
          theRect.origin.y,
          theRect.size.width,
          theRect.size.height);
}

2012-08-26 16:42:45.045 测试 [2320:f803] 单元格 0.000000 20.000000 768.000000 1004.000000

我还在 shouldAutorotateToInterfaceOrientation 中强制横向:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return UIInterfaceOrientationIsLandscape(interfaceOrientation);
}

我以前遇到过很多次,不得不将框架显式设置为横向,但我从来不明白为什么所有故事板设置都没有效果。

我在这里缺少一些基本的东西吗?

4

2 回答 2

1

iOS 中的每个应用程序最初都以纵向模式启动,即使您指定了支持的设备方向并在shouldAutorotateToInterfaceOrientation:. 它将始终以纵向开始,如果设备将旋转到横向。用户可能不会看到它,因为它的速度如此之快。shouldAutorotateToInterfaceOrientation因此,即使您唯一支持的方向是横向方向,您的应用程序也必须能够旋转。

因此,要在开始后获得横向方向,您应该:

  • 在 Xcodes Interface Builder 中设置支持的界面方向
  • 覆盖shouldAutorotateToInterfaceOrientation

- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)io {
    return (io == UIInterfaceOrientationLandscapeRight); 
}
  • 让界面有机会旋转并在之后进行视图配置

关于您关于视图控制器的 Xcode 配置到横向的问题:注意故事板中菜单的标题 - 它说:模拟指标
这意味着您在那里所做的每一次修改只是为了在故事板中模拟它。但是,除非您在代码中进行必要的修改以达到此状态,否则它将无效。

于 2012-08-26T21:03:59.433 回答
0

在您的视图控制器中添加以下代码swift 4.2

override var shouldAutorotate: Bool {
    return true
}

override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
    return .landscapeRight
}
于 2018-10-22T14:19:06.733 回答