我已使用此代码获取屏幕宽度和屏幕高度,
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 ..
答案 0 :(得分:16)
这将为您提供良好的解释 - 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)
答案 1 :(得分:0)
那是因为您使用的是mainScreen
,并且根本没有考虑设备方向。
除非你实现一个以所有方向记录它的方法,否则它最终会一直返回相同的值。
尝试这样的事情:
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
if (([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeLeft) ||
([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeRight))
{
//log here
} else {
// log here
}
答案 2 :(得分:0)
您想在旋转设备时或在横向模式下运行应用程序时获得宽度高度吗?
如果您正在旋转设备,那么您将永远不会在didRotateToInterfaceOrientation中获得新的宽度和高度。
您需要覆盖方法viewWillLayoutSubviews,您将获得新的宽度和高度,您可以检查设备方向是否已更改,您可以使用新尺寸。因为每次视图都会改变时都会调用viewWillLayoutSubviews,所以在实现该函数之前请注意并阅读Apple文档。
答案 3 :(得分:0)
尝试从applicationFrame获取高度和宽度
var h = UIScreen.mainScreen()。applicationFrame.size.height
var w = UIScreen.mainScreen()。applicationFrame.size.Width