通过方向更改获取屏幕宽度/高度的正确方法是啥?
Posted
技术标签:
【中文标题】通过方向更改获取屏幕宽度/高度的正确方法是啥?【英文标题】:What is the correct way to get screen width/height with orientation changes?通过方向更改获取屏幕宽度/高度的正确方法是什么? 【发布时间】:2011-08-12 17:07:17 【问题描述】:我目前正在使用[[UIScreen mainScreen] bounds].size.width
和 height 来获取屏幕宽度和高度,以便从服务器获取新图像(填满屏幕)。我的问题是,方向变化时边界似乎没有变化。因此,如果我旋转设备,即使设备现在处于横向状态,它仍然会给我纵向宽度/高度。我不想根据当前方向对屏幕宽度/高度进行硬编码。有没有一种方法可以检查屏幕宽度和高度以正确反映方向变化?
【问题讨论】:
【参考方案1】:你可以通过
得到宽度和高度int h = self.view.frame.size.height;
int w = self.view.frame.size.width;
【讨论】:
最简单的解决方案,效果很好,唯一的就是 self.view.frame.size.width 和 height。 请注意,如果您的视图控制器位于 UITabBarController、UINavigationController、UISplitViewController 等内部,这不会为您提供 screen 边界。【参考方案2】:最好的方法可能是:
CGSize appSize = [UIApplication sharedApplication].keyWindow.rootViewController.view.bounds.size;
并且还使用appSize.height
作为高度和appSize.width
作为宽度
这将返回始终填充全屏的最顶部视图的方向调整大小,但可能不包括状态栏,具体取决于您的状态栏和 WantsFullscreen 设置。
【讨论】:
【参考方案3】:[UIScreen mainScreen].bounds.size
返回未旋转的边界。您可以在适当的屏幕 UIView 上使用 convertRect:fromView:
方法(为 fromView 传递 nil)来调整旋转等。
【讨论】:
【参考方案4】:我一直在开发一个应用程序,在某些情况下我们遇到过类似的问题,所以我希望我能提供帮助:
-
首先,确保您使用
UIViewController
来管理您的图像。
其次,确保您在该视图控制器上实现的-shouldAutorotateToInterfaceOrientation:
返回YES
。
确保您的图片使用UIImageView
,而不是UIImage
,然后尝试将图像视图的superview(这是视图控制器的视图)上的autoresizesSubviews
设置为@ 987654327@.
如果图像调整了大小,但不是您喜欢的,请尝试弄乱图像视图的autoresizingMask
。
如果在第 3 步之后图像没有自动调整大小,请尝试实现 willRotateToInterfaceOrientation:duration:
并以编程方式设置图像的框架。请记住,它的超级视图(UIViewController's
视图)尚未旋转,因此其框架尚未更新。
最后,如果这不起作用,试试willAnimateRotationToInterfaceOrientation:duration:
,虽然我不太清楚这种方法和前者的区别。
希望这会有所帮助,让我知道你的结果!
-布鲁斯
【讨论】:
【参考方案5】:尝试从 applicationFrame 获取您的高度和宽度
UIScreen.mainScreen().applicationFrame.size.height
【讨论】:
以上是关于通过方向更改获取屏幕宽度/高度的正确方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章