6

我已经使用此代码来获取屏幕宽度和屏幕高度,

    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..

4

4 回答 4

16

这将帮助您很好地解释 -如何获得与方向相关的屏幕高度和宽度?

以及为与建议相同的宏定义的一种方法这是一个方便的宏:

#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)
于 2013-07-12T09:17:59.810 回答
0

那是因为您正在使用mainScreen并且根本没有考虑设备方向。

除非您实现一个在所有方向上记录它的方法,否则它最终会一直返回相同的值。

尝试这样的事情:

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];

if (([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeLeft) || 
        ([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeRight)) 
{       
//log here

} else {
// log here
}
于 2013-07-12T09:11:51.293 回答
0

您想在旋转设备或在横向模式下运行应用程序时获取宽度高度吗?

如果您正在旋转设备,那么您将永远无法在 didRotateToInterfaceOrientation 中获得新的宽度和高度。

您需要覆盖方法 viewWillLayoutSubviews,您将在其中获得新的宽度和高度,并且您可以在那里检查设备方向是否改变,您可以使用新尺寸。因为 viewWillLayoutSubviews 会在每次视图发生变化时被调用,所以在实现该功能之前请注意并阅读 Apple 文档。

于 2013-07-12T09:22:01.963 回答
0

尝试从 applicationFrame 获取您的高度和宽度

var h = UIScreen.mainScreen().applicationFrame.size.height

var w = UIScreen.mainScreen().applicationFrame.size.Width

于 2015-01-15T09:50:57.380 回答