Подтвердить что ты не робот

Как получить ширину и высоту экрана в iOS?

Как получить размеры экрана в iOS?

В настоящее время я использую:

lCurrentWidth = self.view.frame.size.width;
lCurrentHeight = self.view.frame.size.height;

в viewWillAppear: и willAnimateRotationToInterfaceOrientation:duration:

В первый раз я получаю весь размер экрана. Во второй раз я получаю экран минус панель навигации.

4b9b3361

Ответ 1

Как получить размеры экрана в iOS?

Проблема с кодом, который вы опубликовали, заключается в том, что вы рассчитываете, что размер представления соответствует таковому на экране, и, как вы видели, это не всегда так. Если вам нужен размер экрана, вы должны посмотреть на объект, который представляет сам экран, например:

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

Обновление для разделенного вида: В комментариях Дмитрий спросил:

Как я могу получить размер экрана в режиме разделения?

В приведенном выше коде сообщается размер экрана, даже в режиме разделения экрана. Когда вы используете режим разделения экрана, ваше окно приложения меняется. Если приведенный выше код не дает вам информацию, которую вы ожидаете, то, подобно OP, вы смотрите на неправильный объект. В этом случае, однако, вы должны посмотреть на окно вместо экрана, например:

CGRect windowRect = self.view.window.frame;
CGFloat windowWidth = windowRect.size.width;
CGFloat windowHeight = windowRect.size.height;

Ответ 2

Осторожно, [UIScreen mainScreen] также содержит строку состояния, если вы хотите получить фрейм для своего приложения (за исключением строки состояния), вы должны использовать

+ (CGFloat) window_height   {
    return [UIScreen mainScreen].applicationFrame.size.height;
}

+ (CGFloat) window_width   {
    return [UIScreen mainScreen].applicationFrame.size.width;
}

Ответ 3

Я использовал эти методы удобства раньше:

- (CGRect)getScreenFrameForCurrentOrientation {
    return [self getScreenFrameForOrientation:[UIApplication sharedApplication].statusBarOrientation];
}

- (CGRect)getScreenFrameForOrientation:(UIInterfaceOrientation)orientation {

    CGRect fullScreenRect = [[UIScreen mainScreen] bounds];

    // implicitly in Portrait orientation.
    if (UIInterfaceOrientationIsLandscape(orientation)) {
      CGRect temp = CGRectZero;
      temp.size.width = fullScreenRect.size.height;
      temp.size.height = fullScreenRect.size.width;
      fullScreenRect = temp;
    }

    if (![[UIApplication sharedApplication] statusBarHidden]) {
      CGFloat statusBarHeight = 20; // Needs a better solution, FYI statusBarFrame reports wrong in some cases..
      fullScreenRect.size.height -= statusBarHeight;
    }

    return fullScreenRect;
} 

Ответ 4

Я перевел некоторые из приведенных выше Objective-C ответов в код Swift. Каждый перевод сопровождается ссылкой на исходный ответ.

Основной ответ

let screen = UIScreen.main.bounds
let screenWidth = screen.size.width
let screenHeight = screen.size.height

Простой ответ функции

func windowHeight() -> CGFloat {
    return UIScreen.mainScreen().applicationFrame.size.height
}

func windowWidth() -> CGFloat {
    return UIScreen.mainScreen().applicationFrame.size.width
}

Ответ на ориентацию устройства

var screenHeight : CGFloat
let statusBarOrientation = UIApplication.sharedApplication().statusBarOrientation
// it is important to do this after presentModalViewController:animated:
if (statusBarOrientation != UIInterfaceOrientation.Portrait
    && statusBarOrientation != UIInterfaceOrientation.PortraitUpsideDown){
    screenHeight = UIScreen.mainScreen().applicationFrame.size.width
} else {
    screenHeight = UIScreen.mainScreen().applicationFrame.size.height
}

Журнал ответа

let screenWidth = UIScreen.mainScreen().bounds.size.width
let screenHeight = UIScreen.mainScreen().bounds.size.height
println("width: \(screenWidth)")
println("height: \(screenHeight)")

Ответ 5

Я понимаю, что это старый пост, но иногда мне кажется полезным использовать #define константы, подобные этим, поэтому мне не нужно беспокоиться об этом:

#define DEVICE_SIZE [[[[UIApplication sharedApplication] keyWindow] rootViewController].view convertRect:[[UIScreen mainScreen] bounds] fromView:nil].size

Указанная константа должна возвращать правильный размер независимо от ориентации устройства. Тогда получение размеров так же просто, как:

lCurrentWidth = DEVICE_SIZE.width;
lCurrentHeight = DEVICE_SIZE.height;

Ответ 6

Это очень, очень легко получить размер вашего устройства, а также учитывать ориентацию:

// grab the window frame and adjust it for orientation
UIView *rootView = [[[UIApplication sharedApplication] keyWindow] 
                                   rootViewController].view;
CGRect originalFrame = [[UIScreen mainScreen] bounds];
CGRect adjustedFrame = [rootView convertRect:originalFrame fromView:nil];

Ответ 7

Мы должны также рассмотреть ориентацию устройства:

CGFloat screenHeight;
// it is important to do this after presentModalViewController:animated:
if ([[UIApplication sharedApplication] statusBarOrientation] == UIDeviceOrientationPortrait || [[UIApplication sharedApplication] statusBarOrientation] == UIDeviceOrientationPortraitUpsideDown){
    screenHeight = [UIScreen mainScreen].applicationFrame.size.height;
}
else{
    screenHeight = [UIScreen mainScreen].applicationFrame.size.width;
}

Ответ 8

NSLog(@"%.0f", [[UIScreen mainScreen] bounds].size.width);
NSLog(@"%.0f", [[UIScreen mainScreen] bounds].size.height);

Ответ 9

Здесь я обновился для swift 3

applicationFrame не рекомендуется с iOS 9

В быстрых трех они удалили(), и они изменили несколько соглашений об именах, вы можете сослаться здесь Ссылка

func windowHeight() -> CGFloat {
    return UIScreen.main.bounds.size.height
}

func windowWidth() -> CGFloat {
    return UIScreen.main.bounds.size.width
}

Ответ 10

Если вы хотите ширину и высоту экрана независимо от ориентации устройства (полезно для сортировки портретов только для просмотра, которые запускаются из ландшафтных ориентаций):

CGFloat screenWidthInPoints = [UIScreen mainScreen].nativeBounds.size.width/[UIScreen mainScreen].nativeScale;
CGFloat screenHeightInPoints = [UIScreen mainScreen].nativeBounds.size.height/[UIScreen mainScreen].nativeScale;

[UIScreen mainScreen].nativeBounds < - из документов → ограничивающий прямоугольник физического экрана, измеренный в пикселях. Этот прямоугольник основан на устройстве в портретной ориентации. Это значение не изменяется по мере того, как устройство вращается.

Ответ 11

Вот быстрый способ получить размеры экрана:

print(screenWidth)
print(screenHeight)

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

Ответ 12

CGFloat width = [[UIScreen mainScreen] bounds].size.width; CGFloat height = [[UIScreen mainScreen]bounds ].size.height;

Ответ 13

Используйте эти Structs, чтобы узнать полезную информацию о текущем устройстве в Swift 3.0

struct ScreenSize { // Answer to OP question

    static let SCREEN_WIDTH         = UIScreen.main.bounds.size.width
    static let SCREEN_HEIGHT        = UIScreen.main.bounds.size.height
}


struct DeviceType { //Use this to check what is the device kind you're working with

    static let IS_IPHONE_4_OR_LESS  = UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.SCREEN_MAX_LENGTH < 568.0
    static let IS_IPHONE_SE         = UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.SCREEN_MAX_LENGTH == 568.0
    static let IS_IPHONE_7          = UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.SCREEN_MAX_LENGTH == 667.0
    static let IS_IPHONE_7PLUS      = UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.SCREEN_MAX_LENGTH == 736.0
    static let IS_IPAD              = UIDevice.current.userInterfaceIdiom == .pad && ScreenSize.SCREEN_MAX_LENGTH == 1024.0

}


struct iOSVersion { //Get current device iOS version

    static let SYS_VERSION_FLOAT  = (UIDevice.current.systemVersion as NSString).floatValue
    static let iOS7               = (iOSVersion.SYS_VERSION_FLOAT >= 7.0 && iOSVersion.SYS_VERSION_FLOAT < 8.0)
    static let iOS8               = (iOSVersion.SYS_VERSION_FLOAT >= 8.0 && iOSVersion.SYS_VERSION_FLOAT < 9.0)
    static let iOS9               = (iOSVersion.SYS_VERSION_FLOAT >= 9.0 && iOSVersion.SYS_VERSION_FLOAT < 10.0)
    static let iOS10              = (iOSVersion.SYS_VERSION_FLOAT >= 10.0 && iOSVersion.SYS_VERSION_FLOAT < 11.0)

}

Ответ 14

swift 3.0

для ширины

UIScreen.main.bounds.size.width

для высоты

UIScreen.main.bounds.size.height

Ответ 15

Современный ответ:

Если ваше приложение поддерживает раздельный просмотр iPad, эта проблема становится немного сложной. Вам нужен размер окна, а не экран, который может содержать 2 приложения. Размер окна также может меняться во время работы.

Используйте размер главного окна приложения:

UIApplication.shared.delegate?.window??.bounds.size ?? .zero

Примечание. Метод выше может иметь неправильное значение перед тем, как окно станет ключевым окном при запуске. если вам нужна только ширина, метод ниже очень рекомендуется:

UIApplication.shared.statusBarFrame.width

Старое решение с помощью UIScreen.main.bounds вернет границы устройства. Если ваше приложение работает в режиме просмотра с разделом, оно получает неправильные размеры.

self.view.window в горячем ответе может возникнуть неправильный размер, когда приложение содержит 2 или более окон, а окно имеет небольшой размер.

Ответ 16

Вы можете поместить эти макросы в свой файл pch и использовать в любом месте проекта, используя "SCREEN_WIDTH"

#define SCREEN_WIDTH                ((([UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationPortrait) || ([UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationPortraitUpsideDown)) ? [[UIScreen mainScreen] bounds].size.width : [[UIScreen mainScreen] bounds].size.height)

и "SCREEN_HEIGHT"

#define SCREEN_HEIGHT               ((([UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationPortrait) || ([UIApplication sharedApplication].statusBarOrientation ==   UIInterfaceOrientationPortraitUpsideDown)) ? [[UIScreen mainScreen] bounds].size.height : [[UIScreen mainScreen] bounds].size.width)

Пример использования:

CGSize calCulateSizze ;
calCulateSizze.width = SCREEN_WIDTH/2-8;
calCulateSizze.height = SCREEN_WIDTH/2-8;