在纵向和横向模式下获得相同的屏幕宽度和高度
Posted
技术标签:
【中文标题】在纵向和横向模式下获得相同的屏幕宽度和高度【英文标题】:Getting same screen width and height for portrait and landscape mode 【发布时间】:2013-07-12 09:06:17 【问题描述】:我已使用此代码获取屏幕宽度和屏幕高度,
float scaleFactor = [[UIScreen mainScreen] scale];
CGRect screen = [[UIScreen mainScreen] bounds];
CGFloat widthInPixel = screen.size.width * scaleFactor;
CGFloat heightInPixel = screen.size.height * scaleFactor;
NSLog(@"%f",widthInPixel);
NSLog(@"%f",heightInPixel);
和
CGRect screenBounds = [[UIScreen mainScreen] bounds];
NSLog(@"screenBounds W %f",screenBounds.size.width);
NSLog(@"screenBounds H %f",screenBounds.size.height);
但它在纵向和横向模式下显示相同的宽度 = 768 和高度 = 1024..
【问题讨论】:
与this answer重复 【参考方案1】:这将帮助您更好地解释 - How to get orientation-dependent height and width of the screen?
还有一种为建议的Here's a handy macro:定义宏的方法。
#define SCREEN_WIDTH (UIInterfaceOrientationIsPortrait([UIApplication sharedApplication].statusBarOrientation) ? [[UIScreen mainScreen] bounds].size.width : [[UIScreen mainScreen] bounds].size.height) #define SCREEN_HEIGHT (UIInterfaceOrientationIsPortrait([UIApplication sharedApplication].statusBarOrientation) ? [[UIScreen mainScreen] bounds].size.height : [[UIScreen mainScreen] bounds].size.width)【讨论】:
【参考方案2】:那是因为您使用的是mainScreen
并且根本没有考虑设备方向。
除非你实现一个在所有方向记录它的方法,否则它最终会一直返回相同的值。
试试这样的:
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
if (([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeLeft) ||
([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeRight))
//log here
else
// log here
【讨论】:
【参考方案3】:您想在旋转设备或在横向模式下运行应用程序时获取宽度高度吗?
如果您正在旋转设备,那么您将永远无法在 didRotateToInterfaceOrientation 中获得新的宽度和高度。
您需要覆盖方法 viewWillLayoutSubviews,您将在其中获得新的宽度和高度,并且您可以在那里检查设备方向是否改变,您可以使用新尺寸。因为 viewWillLayoutSubviews 会在每次视图发生变化时被调用,所以在实现这个函数之前请注意并阅读 Apple 文档。
【讨论】:
【参考方案4】:尝试从 applicationFrame 获取您的高度和宽度
var h = UIScreen.mainScreen().applicationFrame.size.height
var w = UIScreen.mainScreen().applicationFrame.size.Width
【讨论】:
以上是关于在纵向和横向模式下获得相同的屏幕宽度和高度的主要内容,如果未能解决你的问题,请参考以下文章