ShouldAutorotateToInterfaceOrientation не работает

Я писал свое универсальное приложение в портретном режиме, и теперь, примерно через 15 файлов nib, многие многие viewCotnrollers, Я хотел бы реализовать shouldAutorotateToInterfaceOrientation и создать несколько экранов в ландшафтном режиме.

добавление:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
 return YES;
} 

для ВСЕХ из моих viewControllers, не выполняет работу.

Во время Debug я вижу, что этот метод вызывается, но он просто не работает! не в симуляторе, не в устройстве, не в Iphone, не в Ipad!

Я искал некоторые ответы на форуме и видел несколько советов по использованию:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
 return (interfaceOrientation == UIInterfaceOrientationPortrait ||
   interfaceOrientation == UIInterfaceOrientationLandscapeLeft || 
   interfaceOrientation == UIInterfaceOrientationLandscapeRight ||
   interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown );
} 

Не работал,

добавление:

 [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];

и

 [[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications];

для моего viewDidLoad и viewDidUnload соответственно тоже не работало.

Я потерян.. Любая помощь будет сделана!

просто еще одна информация... все мои представления имеют тип UIControl, так как мне нужен TuchUpInside для работы.

Укажите свою помощь.

Ответ 1

Убедитесь, что все ваши родительские представления имеют autoresizesSubviews = YES. Возможно, вам понадобится сделать это в коде, если вы не задали пружины и распорки в IB для всех своих просмотров.

Указание руководства по построителю интерфейса:

Важно: в файле Cocoa nib, если вы не устанавливайте пружины или стойки для ваш вид в Interface Builder, но затем используйте setAutoresizingMask: метод добавления режима автосохранения в время выполнения, ваше представление все еще не может проявлять правильную авторезистировку поведение. Причина в том, что интерфейс Builder отключает автоматизацию родительский вид детей вообще, если у этих детей нет источников и распорки установлены. Чтобы включить автоматизацию поведение снова, вы должны передать ДА метод setAutoresizesSubviews: метод родительский вид. Сделав это, дочерние представления должны автоматически настраиваться.

Пара других вещей, о которых нужно знать:

  • UINavigationController будет только авторотировать, если его контроллер корневого представления также настроен на авторотирование.

  • UITabBarController будет только авторотировать, если все его контроллеры представлений настроены на авторотирование.

Ответ 2

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    UIInterfaceOrientation des=self.interfaceOrientation;

    if(UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPad) //iPad
    {
        if(des==UIInterfaceOrientationPortrait||des==UIInterfaceOrientationPortraitUpsideDown)//ipad-portairait
        {

        }
        else//ipad -landscape
        {

        }
    }
    else//iphone
    {
        UIInterfaceOrientation des=self.interfaceOrientation;

        if(des==UIInterfaceOrientationPortrait||des==UIInterfaceOrientationPortraitUpsideDown) //iphone portrait
        {

        }
        else //iphone -landscape
        {

        }
    }
return YES;
}

Ответ 3

На какой iOS вы строите? Это было устаревшим в iOS 6.0. (Вместо этого вы должны переопределить методы supportedInterfaceOrientations и preferInterfaceOrientationForPresentation.)

Также вы можете вызвать shouldAutorotate в классе UIViewController:

https://developer.apple.com/library/ios/documentation/uikit/reference/UIViewController_Class/Reference/Reference.html#//apple_ref/occ/instm/UIViewController/shouldAutorotate


Убедитесь, что вы проверили Ориентации поддерживаемого интерфейса на вкладке "Summery" в настройках проекта (выберите название проекта в "Навигаторе проектов" на самом верху).

Если вы не выбрали ориентации, которые вы хотите использовать здесь, тогда симулятор /iphone не позволит экрану изменять ориентацию.

Ответ 4

У меня была эта проблема, но она работала в iOS6, но не в iOS5. Оказывается, у меня было представление в моей раскадровке, что я еще не создал класс viewcontroller.

Ответ 5

... и последнее, но не менее важное: убедитесь, что вы не активировали настройку "Ориентация портретной ориентации заблокирована" на тестовом устройстве (конечно, не относится к симулятору), это отключит вращение в любом приложении. вопрос, что возвращает shouldAutorotateToInterfaceOrientation.