iOS以编程方式获取物理屏幕大小?

时间:2011-11-24 13:36:32

标签: iphone ios ipad screen screen-size

这可能吗?我想要的是英寸数,而不是像素数。我知道它大概是160 ppi。但不完全是。

10 个答案:

答案 0 :(得分:53)

没有API可以为您提供此功能。您最好的选择是查看设备的屏幕尺寸(以点为单位),如果是iPad或iPhone等,请查看该设备的屏幕尺寸,然后使用硬编码值作为屏幕尺寸。

以下是获取屏幕尺寸的一些代码:

CGRect screenRect = [[UIScreen mainScreen] bounds];
CGFloat screenWidth = screenRect.size.width;
CGFloat screenHeight = screenRect.size.height;

请注意,可能会交换宽度和高度,具体取决于设备方向。

答案 1 :(得分:9)

如果它可用,它将在UIScreenUIDevice但它不在那里。

您可以从Erica's UIDevice-extension中的信息和列出的每个设备的规格here on Wikipedia推断出来。

答案 2 :(得分:4)

这是一种估算设备屏幕尺寸的简短方法。它已针对最新设备进行了更新,但未来可能会失败(因为所有猜测方法都可能)。如果镜像设备也会混淆(返回设备的屏幕大小,而不是镜像屏幕大小)

#define SCREEN_SIZE_IPHONE_CLASSIC 3.5
#define SCREEN_SIZE_IPHONE_TALL 4.0
#define SCREEN_SIZE_IPAD_CLASSIC 9.7

+ (CGFloat)screenPhysicalSize
{
    if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
    {
        CGSize result = [[UIScreen mainScreen] bounds].size;
        if (result.height < 500)
            return SCREEN_SIZE_IPHONE_CLASSIC;  // iPhone 4S / 4th Gen iPod Touch or earlier
        else
            return SCREEN_SIZE_IPHONE_TALL;  // iPhone 5
    }
    else
    {
        return SCREEN_SIZE_IPAD_CLASSIC; // iPad
    }
} 

答案 3 :(得分:3)

您可能需要使用[UIScreen mainScreen].scale;

CGFloat scale = [UIScreen mainScreen].scale;
CGRect screenRect = [[UIScreen mainScreen] bounds];

CGFloat physicalWidth = screenRect.size.width * scale;
CGFloat physicalHeight = screenRect.size.height * scale;

答案 4 :(得分:0)

由于已经提出了这个问题,我已经创建了一个开源库来处理这个问题:IRLSize。它可以在任何一个方向上使用:在实际维度中测量视图(或整个屏幕)的大小,或者视图的大小设置为特定的真实世界维度。

答案 5 :(得分:0)

也许Jeff Hay的代码可以改编为包含iPad Mini。诀窍是获取设备的模型标识符。最近的非视网膜iPad是“iPad2,4”,第一款iPad mini是“iPad2,5”。现在您需要检查的是屏幕缩放是否为1.0(非视网膜)

虽然此代码不是面向未来的,但您始终可以为模型标识符添加更多规则。

#import <sys/utsname.h>

#define SCREEN_SIZE_IPAD_MINI 7.9

    struct utsname systemInfo;
    uname(&systemInfo);
    if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad && strcasecmp(systemInfo.machine, "iPad2,5") >= 0 [[UIScreen mainScreen] scale] == 1.0)
        return SCREEN_SIZE_IPAD_MINI

答案 6 :(得分:0)

我使用的“公式”是

#define IS_iPhone5 ( fabs( (double)[ [ UIScreen mainScreen ] bounds ].size.height - (double)568 ) < DBL_EPSILON )

答案 7 :(得分:0)

注意:此处的屏幕旋转很重要

extension UIScreen {
    var physicalSize:CGSize {
        return CGSize(width: bounds.width*scale, height: bounds.height*scale)
    }
}

使用:

print(UIScreen.main.physicalSize)

答案 8 :(得分:-1)

没人说fixedCoordinateSpace。在Swift 3中,为了获得纵向方向的屏幕尺寸,您应该使用:UIScreen.main.fixedCoordinateSpace.bounds

答案 9 :(得分:-2)

CGFloat scale = [UIScreen mainScreen].scale; CGRect screenRect = [[UIScreen mainScreen] bounds]; CGFloat screenWidth = screenRect.size.width * (scale/100.0f); CGFloat screenHeight = screenRect.size.height * (scale/100.0f);

  • 规模很大!