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
.