shouldAutorotateToInterfaceOrientation не работает - PullRequest
18 голосов
/ 19 мая 2010

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

добавление:

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

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

Во время отладки я вижу, что этот метод вызывается, но он просто не будет работать! не в симуляторе, не в устройстве, не в 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 для работы.

Оцените вашу помощь.

Ответы [ 5 ]

44 голосов
/ 20 мая 2010

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

Цитирование руководства пользователя Interface Builder:

Внимание! Если в файле есть перо Какао, не устанавливайте пружины или распорки для Ваше мнение в Интерфейсном Разработчике, но затем используйте setAutoresizingMask: метод добавления авторазмерного поведения при во время выполнения, ваш взгляд все еще может не выставлять правильные авторазмеры поведение. Причина в том, что интерфейс Builder отключает автоматическое изменение размера дети родительского представления вообще, если эти дети не имеют источников и стойки установлены. Чтобы включить авторазмер поведение, вы должны передать YES setAutoresizesSubviews: метод родительский вид. После этого дочерние представления должны корректно изменяться в размере.

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

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

  2. UITabBarController будет автоматически поворачиваться, только если все его контроллеры представления настроены на автоматическое вращение.

3 голосов
/ 15 мая 2012
- (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;
}
1 голос
/ 23 сентября 2013

Для какой iOS вы строите? Это было объявлено устаревшим в iOS 6.0. (Вместо этого вы должны переопределить методы selectedInterfaceOrientations и предпочитаемый метод InterfaceOrientationForPresentation.)

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

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


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

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

0 голосов
/ 13 ноября 2012

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

0 голосов
/ 18 октября 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...