36

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

4

11 回答 11

56

没有 API 可以为您提供此功能。最好的办法是查看设备的屏幕尺寸(以磅为单位),并据此推测它是 iPad 还是 iPhone 等,然后使用硬编码值作为屏幕尺寸。

这是一些获取屏幕大小的代码:

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

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

于 2011-11-24T14:05:45.673 回答
10

如果它可用,它将在UIScreenUIDevice中,但它不存在。

您可以从Erica 的 UIDevice-extension中的信息和Wikipedia 上列出的每个设备的规格中推断出它。

于 2011-11-24T14:08:17.787 回答
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
    }
} 
于 2012-10-10T23:22:23.287 回答
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;
于 2014-11-07T15:36:29.597 回答
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
于 2013-07-14T13:44:07.567 回答
0

既然有人问了这个问题,我就创建了一个开源库来处理这个问题:IRLSize。它可以用于任一方向:以真实世界的维度测量视图(或整个屏幕)的大小,或将视图的大小设置为特定的真实世界维度。

于 2011-11-24T14:03:06.243 回答
0

我使用的“公式”是

#define IS_iPhone5 ( fabs( (double)[ [ UIScreen mainScreen ] bounds ].size.height - (double)568 ) < DBL_EPSILON )
于 2014-06-12T21:46:03.643 回答
0

注意:屏幕旋转在这里很重要

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

使用:

print(UIScreen.main.physicalSize)
于 2020-11-11T08:41:36.903 回答
-1

这是获取屏幕尺寸的快速方法:

var screenWidth: CGFloat {
    if UIInterfaceOrientationIsPortrait(screenOrientation) {
        return UIScreen.mainScreen().bounds.size.width
    } else {
        return UIScreen.mainScreen().bounds.size.height
    }
}
var screenHeight: CGFloat {
    if UIInterfaceOrientationIsPortrait(screenOrientation) {
        return UIScreen.mainScreen().bounds.size.height
    } else {
        return UIScreen.mainScreen().bounds.size.width
    }
}
var screenOrientation: UIInterfaceOrientation {
    return UIApplication.sharedApplication().statusBarOrientation
}

这些作为标准功能包含在:

https://github.com/goktugyil/EZSwiftExtensions

于 2015-11-24T04:42:10.400 回答
-1

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

于 2017-07-18T17:31:20.330 回答
-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);

  • 规模是永恒的!
于 2016-02-16T10:26:32.857 回答