通过方向更改获取屏幕宽度/高度的正确方法是啥?

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

【讨论】:

以上是关于通过方向更改获取屏幕宽度/高度的正确方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Qt 浅析QFontMetrics 获取字体宽度,高度

Qt 浅析QFontMetrics 获取字体宽度,高度

怎样用 JavaScript 准确获取手机屏幕的宽度和高度

如何获取iOS设备屏幕的高度和宽度[重复]

如何更改屏幕方向并获得更改的画布大小

如何获取屏幕的宽度