我有一个 UINavigationController,它从一开始就以横向模式启动。我的 iPad 应用程序仅支持横向界面方向。但是,每当我调用 navigationController.view.frame 时,返回的 CGRect 都是纵向的。
如何让 CGRect 在 frame 中显示横向值?喜欢 (0,0,1024,768) 而不是 (0,0,768,1024)
我有一个 UINavigationController,它从一开始就以横向模式启动。我的 iPad 应用程序仅支持横向界面方向。但是,每当我调用 navigationController.view.frame 时,返回的 CGRect 都是纵向的。
如何让 CGRect 在 frame 中显示横向值?喜欢 (0,0,1024,768) 而不是 (0,0,768,1024)
改为使用bounds
属性。
看起来您的导航控制器属于rootViewController
窗口。窗口通过旋转其根视图控制器来管理自动旋转。旋转是通过应用转换完成的,所以navController.view
也应该打印非身份transform
。
frame
是父坐标中的外部矩形,并且由于窗口的坐标系没有改变,因此框架在所有方向上都是相同的。它适合兄弟视图或父视图使用。bounds
是内部矩形。它将在您的情况下具有正确的尺寸,并且适合其子视图用于进行计算通常frame
只有在为bounds
时才具有相同的尺寸。一旦转换发生变化,您需要知道何时使用以及何时使用. 您可以在 Internet 上找到许多描述两者之间差异的资源。transform
CGAffineTransformIdentity
frame
bounds
frame
bounds
在 xcode 中单击项目文件。在摘要详细信息中,您将有四个按钮,每个按钮指定一个方向。您可以取消选中不需要的方向或仅检查两个横向方向。您会得到它。
您应该从一开始就检查状态栏的方向。这将向您显示应用程序所在的方向。然后,您可以轻松地阻止方向。
-(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 的方向..它解释了必须关闭特定方向。