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

UIScreen MainScreen Bounds возвращает неправильный размер

Итак, я создал новый проект с последней версией XCode и попытался зарегистрировать размер экрана моего приложения (чтобы определить тип устройства для пользовательского интерфейса). Я выполнил следующий код с моего iPhone 5:

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

Это вернуло 480, что является размером экрана для старого семейства iPhone. Я попытался в симуляторе, и случилось то же самое. Есть ли какое-то свойство, которое я должен включить в проекте, чтобы узнать размер экрана?

Это происходит только для 5+ устройств; если я запускаю игру на своем iPad, он распознает размер экрана 1024.

Я знаю, что этот код работал в прошлом. Я сделал игру некоторое время назад, используя тот же самый метод, и у нее не было проблем с определением размера экрана, но это было построено в XCode 4.x.

Дополнительная информация:

Я использую настраиваемый контроллер просмотра, который я создаю в App Delegate со следующим кодом:

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

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    if([Global getDevice] == 1)
    {
        //iPhone 5+
        self.window.rootViewController = [[FivePlus alloc] initWithNibName:nil bundle:nil];

    }
    else if([Global getDevice] == 2)
    {
        //iPhone 4S-
        self.window.rootViewController = [[FourSMinus alloc] initWithNibName:nil bundle:nil];
    }
    else
    {
        //iPad
        self.window.rootViewController = [[iPad alloc] initWithNibName:nil bundle:nil];
    }

    [[self window] makeKeyAndVisible];

    // Override point for customization after application launch.
    return YES;
}

Метод getDevice от Global.h:

+ (int)getDevice
{
if([[UIScreen mainScreen] bounds].size.height == 568 || [[UIScreen mainScreen] bounds].size.width == 568)
    {
        return 1;
    }
    else if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
    {
        return 3;
    }
    else
    {
        return 2;
    }
}
4b9b3361

Ответ 1

Очевидно, что iOS полагается исключительно на наличие изображения запуска в разрешении iPhone 5+, чтобы приложение выполнялось в этом разрешении.

Существует два решения этой проблемы:

1. Использование каталогов активов

Когда вы создаете новый проект, это называется каталогом активов, в котором хранятся ваши файлы изображений запуска. Добавьте один из них в свой проект и престо!

2. Вычистите несколько старых файлов

Если вы некоторое время находились вокруг XCode, вы узнаете, что в одной из более поздних версий XCode 4.x приложение автоматически создало три файла образа запуска по умолчанию для вашего приложения под названием Default.png, [email protected] и [email protected]. Вам нужны эти файлы в вашем приложении, которые по сути являются просто черными изображениями с разрешениями 480x320, 960x640 и 1136x640 соответственно (обратите внимание, что они находятся в формате HxW, а не WxH).

  • Добавьте эти файлы в группу "Поддерживаемые файлы"
  • Перейдите в свойства проекта и выберите "Не использовать каталоги активов" в разделе "Изображение запуска"
  • Удалить каталог активов.

Надеюсь, это поможет кому-то, кто сталкивается с этой нелепой проблемой.

Ответ 2

В XCode6, не имеющем изображения заставки для экрана размером экрана iPhone5, выдается предупреждение. XCode добавит значение по умолчанию (просто черное), если вы нажмете предупреждение.

Это позволит "нормальный" размер симулятора.

Ответ 3

В iOS 8 [[UIScreen mainScreen] bounds].size.height); верните что-то перевернутое, устройство находится в вертикальном или альбомном режиме.

Ответ 4

iOS часто "притворяется", какой размер экрана у вас есть. Apple предполагает, например, что если у вас нет правильного образа запуска для определенного разрешения, вы не разработали приложение для правильной работы в этом разрешении, поэтому оно будет запускать ваше приложение в другом размере. В крайнем случае iPhone-приложение, работающее на iPad, вернет 320 x 480.

Что касается вашего приложения, размер экрана - это размер экрана, доступный вашему приложению. Если он сообщает 320 x 480, то это то, что может использовать ваше приложение. Все, что изображено ниже 480 пикселей, не будет видно.

Вы убеждаете iOS запускать приложение в разрешении, которое вы хотите, например, поставляя изображение запуска в нужном размере. В случае iPhone 6 и 6+ пользователь может запускать их в режиме "Масштаб", поэтому они ведут себя так, как если бы у них был экран iPhone 5 или 6 (только физически больше).