У меня есть универсальное приложение, работающее как на iPad, так и на iPhone.Приложение запускается с помощью файла .xib, встроенного в конструктор интерфейса, который выступает в качестве образа запуска.После запуска приложения оно переключается на соответствующий контроллер представления в соответствии с размером устройства, установленным в делегате приложения:
CGSize screenSize = [[UIScreen mainScreen] bounds].size;
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
if (screenSize.height <= 568.0f) {
// iPhone 4, 4S, 5, 5C, 5S, SE
self.viewController = [[iPhoneSmallViewController alloc] init];
} else {
// All other iPhones
self.viewController = [[iPhoneLargeViewController alloc] init];
}
} else {
// All iPad models
self.viewController = [[iPadViewController alloc] init];
}
Контроллер представления iPad поддерживает все ориентации интерфейса (заданные в целях приложения / главной странице настройки),но на айфонах я разрешаю только режим портрета, ограниченный в контроллере вида как таковой:
- (UIInterfaceOrientationMask)supportedInterfaceOrientations
{
return (UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskPortraitUpsideDown);
}
У меня есть две проблемы с этим методом:
- Если iPhone удерживается горизонтально,приложение по-прежнему загружается в портретном режиме (согласно ограничениям, что все хорошо), но все измерения находятся в альбомной ориентации при инициализации.Элементы пользовательского интерфейса торчат из стороны, потому что они были измерены для ландшафтного вида, но помещены на портрет.
Я использую размер окна, чтобы установить все внутри представления, инициализируя следующую переменную в ViewDidLoadМетод:
windowSize = [[UIScreen mainScreen] bounds].size;
Tt дает мне горизонтальные размеры в телефоне удерживается горизонтально, хотя ландшафтный режим не допускается.
Если приложение изначально загружается с альбомными измерениями, все мои сортировки размеров экрана в делегате приложения отключены, поскольку я определяю модели iPhone по измерению ширины экрана, которая подходит только в портретном режиме.
Вопрос: есть ли у кого-нибудь способ решить эту сложную проблему элегантным и простым способом?
Некоторая дополнительная информация: я использую Xcode 10, полностью поддерживаю iOS9 и все делаю программно в Objective C.
ps: я думаю, что этот метод работал раньше, но больше не работает в iOS 12. Но я могу ошибаться ...
Редактировать: я предоставляю изображение того, чего я хочу достичь, и всеПомощь будет принята с благодарностью.Как я уже сказал, это работало и раньше (приложение довольно старое), но в последних выпусках iOS стало все более глючно и отчаянно требуется очистка, с чем мне нужна помощь.
Одна вещь, которая может решить моюпроблема заключается в том, если бы я мог каким-то образом ограничить ориентацию интерфейса в зависимости от типа устройства в файле launchScreen.xib, поскольку я считаю, что именно это приводит к неправильному поведению на iPhone.
![enter image description here](https://i.stack.imgur.com/l6Xs2.png)