shouldAutorotateToInterfaceOrientation не работает
Я писал свое универсальное приложение в портретном режиме, и теперь, после примерно 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 ответов
Убедитесь, что все ваши родительские представления имеют autoresizesSubviews = YES. Возможно, вам придется сделать это в коде, если вы не установили пружины и распорки в IB для всех своих представлений.
Цитирование руководства пользователя Interface Builder:
Важное замечание: Если в файле Nib Какао не заданы пружины или распорки для представления в Интерфейсном Разработчике, но затем используется метод setAutoresizingMask: для добавления поведения автоматического изменения размера во время выполнения, ваше представление может по-прежнему не отображать правильное поведение автоматического изменения размера. Причина в том, что Interface Builder полностью отключает автоматическое изменение размера дочерних элементов родительского представления, если для этих дочерних элементов не установлены пружины и распорки. Чтобы снова включить режим автоматического изменения размера, вы должны передать YES методу setAutoresizesSubviews: родительского представления. После этого дочерние представления должны правильно изменить размер.
Еще пара вещей, о которых нужно знать:
UINavigationController будет автоматически поворачиваться, только если его корневой контроллер представления также настроен на автоматическое вращение.
UITabBarController будет автоматически поворачиваться, только если все его контроллеры представления настроены на автоматическое вращение.
- (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;
}
Для какой iOS вы строите? Это было объявлено устаревшим в iOS 6.0. (Вместо этого вы должны переопределить методы selectedInterfaceOrientations и предпочитаемый метод InterfaceOrientationForPresentation.)
Также вы можете вызвать shouldAutorotate в классе UIViewController:
Убедитесь, что вы проверили Поддерживаемые ориентации интерфейса на вкладке "Summery" в настройках проекта (выберите имя проекта в "Навигаторе проектов" в самом верху).
Если вы не выбрали ориентацию, которую хотите использовать, симулятор / iphone не позволит экрану изменить ориентацию.
... и, наконец, что не менее важно, убедитесь, что вы не активировали настройку "Ориентация портрета заблокирована" на тестовом устройстве (конечно, это не относится к симулятору), это отключит вращение в любом приложении, независимо от того, что shouldAutorotateToInterfaceOrientation
возвращается.
У меня была эта проблема, но она работала в iOS6, но не в iOS5. Оказывается, у меня в раскадровке было представление, что я еще не создал класс viewcontroller.