Проблемы с ротацией UITabBarController/UINavigationController

Моя проблема заключается в следующем: я хочу разрешить портретную ориентацию только для всех моих ViewController, кроме 1 ViewController, который должен разрешать как портретную, так и альбомную лево/право. Теперь я потратил почти 2 дня на то, как установить ориентацию в IOS для разных слайдов/ViewController. После некоторого поиска я нашел этот поток здесь, в стеке: Проблемы вращения UITabBarController в ios 6

Я последовал примеру Кунани в той ветке, которую опубликую здесь, чтобы сэкономить время всем читателям:

Зак, я столкнулся с той же проблемой. Это потому, что ваш viewController встроен в контроллер TabBar или UINavigationController, и вызовы этих методов происходят внутри них, а не в вашем обычном представлении (изменено в iOS6). Я столкнулся с этой проблемой, потому что я представлял viewController, встроенный в UINavigationController, во всех моих модальных представлениях, которые имели переход к различным представлениям (процесс регистрации, вход и т. д.). Мое простое исправление состояло в том, чтобы создать CATEGORY для UINavigationController, который включает эти два метода. В любом случае я должен Autorotate возвращать НЕТ, потому что я не хочу, чтобы мои модальные представления вращались. Ваше решение может быть таким простым, попробуйте. Надеюсь, поможет. Я создал категорию и назвал ее autoRotate и выбрал опцию UINavigationController. Файл M+H находится ниже.

#import "UINavigationController+autoRotate.h"

@implementation UINavigationController (autoRotate)

-(BOOL)shouldAutorotate {
return NO;
}

- (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskPortrait;
}

@end

... и категория .h:

 #import <UIKit/UIKit.h>

 @interface UINavigationController (autoRotate)

-(BOOL)shouldAutorotate;
- (NSUInteger)supportedInterfaceOrientations;

@end

Я сделал то, что он сказал, и попытался установить категорию для моего UITabBarController, который сработал, все классы, подключенные к tabBar, теперь допускают только ориентациюPortrait. Но если вы посмотрите на следующую картинку

введите здесь описание изображения

(скриншот из моего проекта) в середине StoryBoard есть класс под названием ShowTaskView. Этот класс связан с большинством классов (которые напрямую связаны с UITabBarController) через UINavigationController. Даже если я установлю UITabBarController только для портрета, ShowTaskView, похоже, будет затронут этим правилом, и я не могу заставить его вращаться. Схему в моем проекте тоже можно описать так:

TabBarController ----> UINavigationController -------> class X ----------> class ShowTaskView

Что я могу сделать отсюда, если я хочу, чтобы мои классы были подключены к tabBarController только для того, чтобы разрешать ориентациюPortrait, а остальные классы допускали как книжную, так и альбомную ориентацию в зависимости от того, как построен мой проект? Я очень расстроен этой проблемой, потому что ее чертовски сложно решить :/

С Уважением


person Jesper Martensson    schedule 02.11.2012    source источник
comment
Пожалуйста, обратитесь к моему ответу, я думаю, что он решит вашу проблему 6">stackoverflow.com/questions/12522903/   -  person Võ Huy Hưng    schedule 18.06.2013


Ответы (1)


пожалуйста, обратитесь к моему ответу в аналогичной теме: Стек контроллера навигации в ландшафтном режиме, но модально представленный вид контроллера представления всегда имеет портретный размер кадра

iOS6 управляет вращением с помощью навигационных стеков, поэтому поместите вращающееся представление в отдельный навигационный контроллер, чтобы иметь возможность управлять им там.

person whiteagle    schedule 02.11.2012