Заставить приложение iPad показывать splitView даже в книжной ориентации (как приложение «Настройки iPad») - PullRequest
3 голосов
/ 07 января 2011

Я пытаюсь разработать приложение для iPad на основе splitView, которое отображает интерфейс разделения в любой ориентации. Я попытался создать подкласс класса UISplitViewController, как указано в этом руководстве, но оно не работает. Я попытался создать категорию для установки _hidesMasterViewInPortrait = (hidden) ? 0 : 1;, как предложено в одном из комментариев в приведенном выше блоге, но ничего не помогло.

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

Ответы [ 9 ]

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

В классе viewController, который реализует протокол UISplitViewControllerDelegate (обычно DetailViewController), добавьте следующий код.

- (BOOL) splitViewController:(UISplitViewController *)svc shouldHideViewController:(UIViewController *)vc inOrientation:(UIInterfaceOrientation)orientation {   
    return NO;
}

Согласно Документам это доступно с iOS 5.

Чтобы увидеть это в действии:-открытый Xcode.-Создайте новое приложение Master / Detail.-Добавьте приведенный выше код в DetailViewController- Запустите симулятор iPad.

В своем собственном проекте вы захотите добавить следующую строку в метод viewDidLoad элемента detailViewController.

self.splitViewController.delegate = self;
12 голосов
/ 15 сентября 2014

В iOS8 (Swift) используйте это:

splitViewController.preferredDisplayMode = UISplitViewControllerDisplayMode.AllVisible
3 голосов
/ 10 января 2011

То, что вы описываете, звучит как приложение настроек Apple (на iPad).Моя интуиция заключается в том, что это не UISplitView.Это просто представление, содержащее два табличных представления.Исправьте макет вручную, когда устройство вращается.Другими словами, если вам не нужно то, что делает UISplitView, то вам вообще не нужен UISplitView.

РЕДАКТИРОВАТЬ 19.12.2011: В iOS 5 проблема в основном решена, посколькуТеперь определите свой собственный контроллер представления контейнера, плюс вы можете предотвратить отклонение левого представления в режиме разделения.

2 голосов
/ 07 января 2011

Я не уверен, что это возможно со стандартным SplitViewController, но вы можете использовать пользовательский из

https://github.com/mattgemmell/MGSplitViewController

1 голос
/ 21 марта 2011

вы можете создать подкласс UISplitViewController, а затем переписать следующий метод:

 - (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation duration:(NSTimeInterval) duration
0 голосов
/ 21 ноября 2013
you just need to add this delegate method to your detail view manager

    - (BOOL)splitViewController:(UISplitViewController *)svc 
       shouldHideViewController:(UIViewController *)vc 
                  inOrientation:(UIInterfaceOrientation)orientation
    {
        // Hide split view in portrait mode
        //return UIInterfaceOrientationIsPortrait(orientation);

        // Show Split view in portrait mode
        return NO;
    }

//vKj
0 голосов
/ 03 января 2012

Вы не можете заставить Apple 'splitViewController вести себя так (и попасть в магазин приложений). Вам нужно написать свой собственный контроллер представления контейнера. См. Документы Apple

0 голосов
/ 03 апреля 2011

привет мой первый пост, и я надеюсь помочь:

вот как это работает

[splitViewController setHidesMasterViewInPortrait:NO];
0 голосов
/ 07 января 2011

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

...