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;
}
}
Ответы
Ответ 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 (только физически больше).