在iPhone App中如何检测设备的屏幕分辨率

ios*_*ios 128 cocoa-touch objective-c ios

在iPhone App中,在设备上运行App时如何检测运行App的设备的屏幕分辨率?

小智 343

CGRect screenBounds = [[UIScreen mainScreen] bounds];
Run Code Online (Sandbox Code Playgroud)

这将为您提供整个屏幕的分辨率,因此iPhone最常用的是320x480.尽管iPhone4的屏幕尺寸要大得多,但iOS仍然可以提供320x480而不是640x960.这主要是因为较旧的应用程序崩溃.

CGFloat screenScale = [[UIScreen mainScreen] scale];
Run Code Online (Sandbox Code Playgroud)

这将为您提供屏幕的比例.对于没有Retina显示器的所有设备,这将返回1.0f,而Retina显示设备将提供2.0f,而iPhone 6 Plus(Retina HD)将提供3.0f.

现在,如果您想获得iOS设备屏幕的像素宽度和高度,您只需要做一件简单的事情.

CGSize screenSize = CGSizeMake(screenBounds.size.width * screenScale, screenBounds.size.height * screenScale);
Run Code Online (Sandbox Code Playgroud)

通过乘以屏幕的比例,您可以获得实际的像素分辨率.

可以在此处阅读有关iOS中点和像素之间差异的详细信息.

编辑:( Swift版本)

let screenBounds = UIScreen.main.bounds
let screenScale = UIScreen.main.scale
let screenSize = CGSize(width: screenBounds.size.width * screenScale, height: screenBounds.size.height * screenScale)
Run Code Online (Sandbox Code Playgroud)

  • 除了在iPhone 6 Plus的情况下这不是"实际像素"分辨率.这是分辨率所有**在代码中以*(OpenGL除外)渲染的分辨率,具有3倍的比例,但随后**内部向下采样到屏幕的原始分辨率1080 x 1920. [链接]的许多好解释之一(http://www.paintcodeapp.com/news/iphone-6-screens-demystified) (4认同)

Tai*_*mal 19

UIScreen类允许您以点和像素查找屏幕分辨率.

屏幕分辨率以点或像素为单位.它绝不应与屏幕尺寸混淆.较小的屏幕尺寸可以具有更高的分辨率.

UIScreen的'bounds.width'在Points中返回矩形大小 在此输入图像描述

UIScreen的'nativeBounds.width'以像素为单位返回矩形大小.此值被检测为PPI(每英寸点数).显示设备上图像的清晰度和清晰度. 在此输入图像描述

您可以使用UIScreen类来检测所有这些值.

Swift3

// Normal Screen Bounds - Detect Screen size in Points.
let width = UIScreen.main.bounds.width
let height = UIScreen.main.bounds.height
print("\n width:\(width) \n height:\(height)")

// Native Bounds - Detect Screen size in Pixels.
let nWidth = UIScreen.main.nativeBounds.width
let nHeight = UIScreen.main.nativeBounds.height
print("\n Native Width:\(nWidth) \n Native Height:\(nHeight)")
Run Code Online (Sandbox Code Playgroud)

安慰

width:736.0 
height:414.0

Native Width:1080.0 
Native Height:1920.0
Run Code Online (Sandbox Code Playgroud)

Swift 2.x

//Normal Bounds - Detect Screen size in Points.
    let width  = UIScreen.mainScreen.bounds.width
    let height = UIScreen.mainScreen.bounds.height

// Native Bounds - Detect Screen size in Pixels.
    let nWidth  = UIScreen.mainScreen.nativeBounds.width
    let nHeight = UIScreen.mainScreen.nativeBounds.height
Run Code Online (Sandbox Code Playgroud)

的ObjectiveC

// Normal Bounds - Detect Screen size in Points.
CGFloat *width  = [UIScreen mainScreen].bounds.size.width;
CGFloat *height = [UIScreen mainScreen].bounds.size.height;

// Native Bounds - Detect Screen size in Pixels.
CGFloat *width  = [UIScreen mainScreen].nativeBounds.size.width
CGFloat *height = [UIScreen mainScreen].nativeBounds.size.width
Run Code Online (Sandbox Code Playgroud)


ios*_*_av 8

在App Delegate中使用它:我正在使用故事板

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {

    CGSize iOSDeviceScreenSize = [[UIScreen mainScreen] bounds].size;

    //----------------HERE WE SETUP FOR IPHONE 4/4s/iPod----------------------

    if(iOSDeviceScreenSize.height == 480){          

        UIStoryboard *iPhone35Storyboard = [UIStoryboard storyboardWithName:@"iPhone" bundle:nil];

        // Instantiate the initial view controller object from the storyboard
        UIViewController *initialViewController = [iPhone35Storyboard instantiateInitialViewController];

        // Instantiate a UIWindow object and initialize it with the screen size of the iOS device
        self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

        // Set the initial view controller to be the root view controller of the window object
        self.window.rootViewController  = initialViewController;

        // Set the window object to be the key window and show it
        [self.window makeKeyAndVisible];

        iphone=@"4";

        NSLog(@"iPhone 4: %f", iOSDeviceScreenSize.height);

    }

    //----------------HERE WE SETUP FOR IPHONE 5----------------------

    if(iOSDeviceScreenSize.height == 568){

        // Instantiate a new storyboard object using the storyboard file named Storyboard_iPhone4
        UIStoryboard *iPhone4Storyboard = [UIStoryboard storyboardWithName:@"iPhone5" bundle:nil];

        // Instantiate the initial view controller object from the storyboard
        UIViewController *initialViewController = [iPhone4Storyboard instantiateInitialViewController];

        // Instantiate a UIWindow object and initialize it with the screen size of the iOS device
        self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

        // Set the initial view controller to be the root view controller of the window object
        self.window.rootViewController  = initialViewController;

        // Set the window object to be the key window and show it
        [self.window makeKeyAndVisible];

         NSLog(@"iPhone 5: %f", iOSDeviceScreenSize.height);
        iphone=@"5";
    }

} else if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
    // NSLog(@"wqweqe");
    storyboard = [UIStoryboard storyboardWithName:@"iPad" bundle:nil];

}

 return YES;
 }
Run Code Online (Sandbox Code Playgroud)


boo*_*oog 5

对于iOS 8,我们可以使用它[UIScreen mainScreen].nativeBounds,就像这样:

- (NSInteger)resolutionX
{
    return CGRectGetWidth([UIScreen mainScreen].nativeBounds);
}

- (NSInteger)resolutionY
{
    return CGRectGetHeight([UIScreen mainScreen].nativeBounds);
}
Run Code Online (Sandbox Code Playgroud)