1

我有一个 UINavigationController,它从一开始就以横向模式启动。我的 iPad 应用程序仅支持横向界面方向。但是,每当我调用 navigationController.view.frame 时,返回的 CGRect 都是纵向的。

如何让 CGRect 在 frame 中显示横向值?喜欢 (0,0,1024,768) 而不是 (0,0,768,1024)

4

3 回答 3

3

改为使用bounds属性。

看起来您的导航控制器属于rootViewController窗口。窗口通过旋转其根视图控制器来管理自动旋转。旋转是通过应用转换完成的,所以navController.view也应该打印非身份transform

  • frame父坐标中的外部矩形,并且由于窗口的坐标系没有改变,因此框架在所有方向上都是相同的。它适合兄弟视图或父视图使用。
  • bounds内部矩形。它将在您的情况下具有正确的尺寸,并且适合其子视图用于进行计算

通常frame只有在为bounds时才具有相同的尺寸。一旦转换发生变化,您需要知道何时使用以及何时使用. 您可以在 Internet 上找到许多描述两者之间差异的资源。transformCGAffineTransformIdentityframeboundsframebounds

于 2013-08-08T06:32:49.703 回答
0

在 xcode 中单击项目文件。在摘要详细信息中,您将有四个按钮,每个按钮指定一个方向。您可以取消选中不需要的方向或仅检查两个横向方向。您会得到它。

于 2013-08-08T06:26:33.483 回答
0

您应该从一开始就检查状态栏的方向。这将向您显示应用程序所在的方向。然后,您可以轻松地阻止方向。

-(void)checkLaunchOrientation:(id)sender{

    UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;
    BOOL isLandscape = UIDeviceOrientationIsLandscape([[UIApplication sharedApplication] statusBarOrientation]);

    if (UIInterfaceOrientationIsLandscape(orientation) || isLandscape)
    {
        isPortrait = NO;
    }
    else
    {
        isPortrait = YES;
    }
}

还要在此处查看我的答案的链接...在通用应用程序中固定 Iphone 的方向..它解释了必须关闭特定方向。

于 2013-08-08T06:32:56.063 回答