Пейзажное приложение запускается в портретной ориентации при запуске — кнопки сбоку недоступны

У меня была эта проблема много раз, и я просто не могу найти решение для нее...

Большинство наших приложений работают только в ландшафтном режиме, и приложение, над которым я сейчас работаю (и многие из тех, над которыми я работал в прошлом), демонстрирует следующее поведение: при первом запуске приложение правильно отображается в альбомном режиме, но никакие кнопки в правой части экрана не могут быть нажаты. Приложение ведет себя так, как будто оно распознает только прикосновения к той части экрана, которая была бы видна, если бы приложение было в портретном режиме, игнорируя любые прикосновения к правой стороне экрана. Если я нажму на другой viewController, а затем вернусь к проблемному viewController, он правильно отреагирует на все прикосновения к экрану. Только при первом запуске приложение думает, что работает в портретном режиме, и не распознает касания справа от области 768x1024 (или 1536x2048, или 320x480, или 640x960).

Итак, я вижу визуальную область 1024x768, но могу нажимать только на кнопки в первых 768 пикселях экрана (самые правые 256 пикселов недоступны)

Обходной путь, который я пробовал (с ограниченным успехом — он работал раньше, но не всегда работает и не работает сейчас), включал эти строки в несколько мест, таких как AppDelegate.m, в rootViewController.m и в конкретном viewController.m, у которого есть проблема, описанная выше:

self.view.frame = CGRectMake(0.0, 0.0, 1024.0, 768.0);

//I've also tried:

CGRect landFrame = self.view.frame;
landFrame.size.width = self.view.frame.size.height;
landFrame.size.height = self.view.frame.size.width;
self.view.frame = landFrame;

ЛЮБЫЕ ИДЕИ?


Значения .plist включают:

Исходная ориентация интерфейса — Альбомная (правая кнопка «Домой»)

Поддерживаемые ориентации интерфейса:

  • Пункт 0 — Пейзаж (правая кнопка «Домой»)
  • Пункт 1 — Пейзаж (левая кнопка «Домой»)

У меня есть этот код в rootViewController и конкретном viewController:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    return (UIInterfaceOrientationIsLandscape(interfaceOrientation));

    //I've also tried:
    return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationLandscapeRight);
}

person RanLearns    schedule 04.01.2013    source источник
comment
ты работаешь на айпаде или айфоне..? какая версия ios у вас работает..?   -  person Nitin Gohel    schedule 04.01.2013
comment
Это происходит как на iPad, так и на iPhone. Устройства работают под управлением iOS 6. Я уже сталкивался с этой проблемой на iOS 5, iOS 4, iOS 3 и iOS 2...   -  person RanLearns    schedule 05.01.2013


Ответы (1)


Это самая полезная вещь, которую я нашел:

В делегате приложения didFinishLaunchingWithOptions:

Изменить [окно addSubview:navigationController.view];

В [окно setRootViewController:navigationController];

и в Root ViewController измените

– (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

to:

  • (BOOL) долженАвтоповорот {

вернуть ДА;

}

и установите поддерживаемые интерфейсные ориентации в файле .plist.

person RanLearns    schedule 09.11.2013