当前位置:  开发笔记 > IOS > 正文

UIScreen applicationFrame在横向应用程序启动时返回不正确的矩形(iPhone/iPad)

如何解决《UIScreenapplicationFrame在横向应用程序启动时返回不正确的矩形(iPhone/iPad)》经验,为你挑选了5个好方法。

在横向模式下启动时,无法为我的iPad应用程序获取正确的界限.我在Info.plist文件中设置了正确的键,我的视图控制器在横向(和纵向,自然)中正确启动.

在我的applicationDidFinishLaunching:方法中,我在3秒延迟后调用选择器,并且该方法调用[[UIScreen mainScreen] applicationFrame],但它返回一个纵向框架(即高度>宽度).

有谁知道如何解决这一问题?它闻起来像是一个臭虫(如果是这样我将提交雷达),但如果它是预期的行为,它在哪里记录?



1> bentford..:

我从不依赖 [[UIScreen mainScreen] applicationFrame],特别是在应用程序发布期间.

在代码中创建视图时,使用superview设置框架.

如果你使用带有"模拟界面元素"的xib,它们的大小将正确,一切都会很好.

基于UINavigationController的应用程序

在基于UINavigationController的应用程序的情况下,直接从中抓取框架self.navigationController.view,不要尝试使用[self loadView]self.view.superview.UINavigationController使用"隐藏"子视图来完成它的工作 - 因此直接超级视图将无法工作.

UINavigationController很特别,因为在应用程序启动期间,导航控制器loadView会在调用后调整视图大小.当你自动调整踢球时,你最终会在屏幕底部留下一小部分空间.

为什么不用UIScreen

[[UIScreen mainScreen] applicationFrame]无法可靠地工作(特别是在横向应用程序启动期间).我的经验是viewcontroller的interfaceOrientation属性与applicationFrame方向不匹配.



2> 100grams..:
CGRect bounds = [[UIScreen mainScreen] bounds]; // portrait bounds
if (UIInterfaceOrientationIsLandscape([[UIApplication sharedApplication] statusBarOrientation])) {
    bounds.size = CGSizeMake(bounds.size.height, bounds.size.width);
}



3> progrmr..:

当您以横向方向握住iPad并启动应用程序时,视图控制器最初会看到纵向视图的边界(即使方向报告横向).然后视图控制器将在出现之前获得一条消息以旋转到横向.



4> Francesco Pu..:

这是我在视图控制器处于格局时获取正确CGRect的方式:

CGRect landscapeBounds;
if (self.view.frame.size.width < self.view.frame.size.height)
    landscapeBounds = CGRectMake(self.view.frame.origin.y, self.view.frame.origin.x, self.view.frame.size.height, self.view.frame.size.width);
else
    landscapeBounds = CGRectMake(self.view.frame.origin.x, self.view.frame.origin.y, self.view.frame.size.width, self.view.frame.size.height);



5> rpetrich..:

这是设计的.您应该查询超级视图的大小并根据需要进行调整.


` - [UIDevice orientation]`不应该用于此目的; 应该使用` - [UIApplication statusBarOrientation]`.在这种情况下,`UIDeviceOrientation`有其他状态:`UIDeviceOrientationUnknown`,`UIDeviceOrientationFaceUp`和`UIDeviceOrientationFaceDown`.
推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有