为纵向和横向模式获得相同的屏幕宽度和高度

时间:2013-07-12 09:06:17

标签: ios objective-c orientation uiinterfaceorientation

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

    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 个答案:

答案 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