Как включить альбомную ориентацию в панели вкладок + приложение NavigationControllers? - PullRequest
0 голосов
/ 27 октября 2011

Я программно создаю приложение на основе панели вкладок.В приложении метод didFinishLaunchingWithOptions (делегат приложения), который я поместил:

self.tabBarController = [[[UITabBarController alloc] init] autorelease];

SearchViewController *search_vc = [[[SearchViewController alloc] init] autorelease];
SearchBookmarksViewController *search_bookmarks_vc = [[[SearchBookmarksViewController alloc] init] autorelease];
ItemsBookmarksViewController *items_bookmarks_vc = [[[ItemsBookmarksViewController alloc] init] autorelease];
AboutUsViewController *aboutus_vc = [[[AboutUsViewController alloc] init] autorelease];

UINavigationController *search_nav = [[[UINavigationController alloc] initWithRootViewController:search_vc] autorelease];
UINavigationController *search_bookmarks_nav = [[[UINavigationController alloc] initWithRootViewController:search_bookmarks_vc] autorelease];
UINavigationController *items_bookmarks_nav = [[[UINavigationController alloc] initWithRootViewController:items_bookmarks_vc] autorelease];
UINavigationController *aboutus_nav = [[[UINavigationController alloc] initWithRootViewController:aboutus_vc] autorelease];

NSArray vc_stack = [NSArray arrayWithObjects:search_nav,search_bookmarks_nav,items_bookmarks_nav,aboutus_vc,nil];

tabBarController.viewControllers = vc_stack;

[self.window addSubview:tabBarController.view];

SearchViewController - это, по сути, форма поиска, показывающая результаты в UItableView со строками, которые при выборе отображают детали овыбранный ряд.Пользователь также может нажать кнопку «Просмотр фотографий», которая нажимает на контроллер представления с UIImageView, чтобы показать некоторые фотографии.

Теперь при работе с представлением фотографий мне пришлось работать с альбомной ориентацией, которая, кажется, не работает легков приложениях панели вкладок. Можете ли вы помочь нам узнать, что именно нужно сделать, чтобы контроллеры просмотра фотографий обрабатывали альбомную ориентацию?

Мне сказали сделать shouldAutorotateToInterfaceOrientation метод для возвратаДА в каждом контроллере представления, таким образом делая любое представление, чтобы разрешить альбомную ориентацию ИЛИ подкласса TabBarController, и это последнее решение может вызвать отклонение моего приложения Apple.Так что я немного запутался в том, что именно делать ...

Спасибо заранее за вашу помощь!

Стефан

Ответы [ 3 ]

3 голосов
/ 27 октября 2011

Это очень просто, вам просто нужно сделать: -

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

для каждого вашего ViewController.

2 голосов
/ 27 октября 2011

Я использовал обе упомянутые вами опции.

  1. Метод make shouldAutorotateToInterfaceOrientation для возврата YES в каждом экземпляре / подклассе контроллера просмотра: чтобы это работалоВы должны убедиться, что у каждого отдельного контроллера представления есть свой метод shouldAutorotateToInterfaceOrientation, чтобы возвратить ДА.Одним из вариантов является CMD + Shift + F для поиска во всем проекте слова «: UIViewController», это покажет вам список всех файлов заголовков, которые наследуются от UIViewController, поэтому для каждого файла реализации, соответствующего этому параметру, следует установить флажок shouldAutorotateToInterfaceOrientation в значение YES.заголовки.(Это потому, что иногда вы можете включить сторонний код, который имеет некоторые классы, наследуемые от UIViewController, и которые вы пропускаете, чтобы установить для whereAutorotateToInterfaceOrientation значение YES)

  2. подкласс TabBarController.что "Этот класс не предназначен для создания подклассов." поэтому было бы лучше избежать этой опции, я использовал, и она работает, но у вас всегда будет возможность быть отклоненной Apple.(Может быть, не в первый раз, но при любом обновлении)

Во всяком случае, я думаю, что Apple не рекомендует отображать приложения с вкладками в альбомном режиме, потому что панель вкладок занимает много местана экране.Поэтому было бы лучше рассмотреть архитектуру вашего приложения, чтобы увидеть, действительно ли нужен контроллер tabbarcontroller, или создать свой собственный элемент управления tabbarcontroller, такой как приложение Twitter на iPhone.Таким образом, вы можете уменьшить высоту панели вкладок в Lanscape.

1 голос
/ 07 ноября 2012

В дополнение к включению поворота на каждом из контроллеров подпредставления (которое включено по умолчанию, если вы разрабатываете в ios5), если вы хотите захватить весь экран, сделайте что-то вроде:

UIInterfaceOrientation toOrientation = self.interfaceOrientation;

if (self.tabBarController.view.subviews.count >= 2 )
    {
UIView *transView = [self.tabBarController.view.subviews objectAtIndex:0];
UIView *tabBar = [self.tabBarController.view.subviews objectAtIndex:1];


if(toOrientation == UIInterfaceOrientationLandscapeLeft || toOrientation == UIInterfaceOrientationLandscapeRight) {
    transView.frame = CGRectMake(0, 0, 568, 320);
    self.portraitView.hidden = YES;
    self.landscapeView.hidden = NO;
    tabBar.hidden = TRUE;
    self.wantsFullScreenLayout = YES;
}
else
{
    //Designing to accomodate the largest possible screen on an iPhone. The structs and springs should be setup so that the view will remain consistent from portrait to landscape and back to portrait.
    transView.frame = CGRectMake(0, 0, 320, 568);
    tabBar.hidden = FALSE;
    self.portraitView.hidden = NO;
    self.landscapeView.hidden = YES;
    self.wantsFullScreenLayout = NO;
}
    }`

UPDATE:

https://stackoverflow.com/a/13523577/1807026

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