通过方向更改获得屏幕宽度/高度的正确方法是什么?

时间:2011-08-12 17:07:17

标签: iphone ios

我目前正在使用[[UIScreen mainScreen] bounds].size.width和height来获取屏幕宽度和高度,以便从服务器获取新图像(填满屏幕)。我的问题是看起来边界不会改变方向变化。因此,如果我旋转设备,它仍然会给我纵向宽度/高度,即使设备现在处于横向状态。我不想根据当前方向对屏幕宽度/高度进行硬编码。有没有办法可以检查正确反映方向变化的屏幕宽度和高度?

5 个答案:

答案 0 :(得分:2)

你可以通过

获得宽度和高度
int h = self.view.frame.size.height;
int w = self.view.frame.size.width;

答案 1 :(得分:2)

最好的方法可能是:

CGSize appSize = [UIApplication sharedApplication].keyWindow.rootViewController.view.bounds.size;

并且还使用appSize.height作为高度,使用appSize.width作为宽度 这将返回最顶层视图的方向调整大小,该大小始终填满整个屏幕,但可能会根据您的状态栏和wantFullscreen设置排除状态栏。

答案 2 :(得分:0)

[UIScreen mainScreen].bounds.size返回未旋转的边界。您可以在适当的屏幕UIView上使用convertRect:fromView:方法(在fromView中传递nil)来调整旋转等。

答案 3 :(得分:0)

我一直在开发一个应用程序,我们在几次遇到这样的问题,所以我希望我可以提供帮助:

  1. 首先,请确保使用UIViewController来管理您的图片。
  2. 其次,请确保您在该视图控制器上的-shouldAutorotateToInterfaceOrientation:实现返回YES
  3. 确保您使用的是UIImageView而不是UIImage,然后尝试在图片视图的 superview 上设置autoresizesSubviews(这是查看控制器的视图)到YES
  4. 如果图片调整大小但不符合您的喜好,请尝试使用图片视图autoresizingMask
  5. 如果在步骤3之后图像未自动调整,请尝试实施willRotateToInterfaceOrientation:duration:并以编程方式设置图像的帧。请记住,它的超级视图(UIViewController's视图)尚未旋转,因此其框架尚未更新。
  6. 最后,如果这不起作用,请尝试willAnimateRotationToInterfaceOrientation:duration:,虽然我不太清楚此方法与前者之间的区别。
  7. 希望这会有所帮助,让我知道你的结果!

    -Bruce

答案 4 :(得分:0)

尝试从applicationFrame获取高度和宽度

  

UIScreen.mainScreen()。applicationFrame.size.height