UiSplitViewController не выполняет автоматическую проверку - PullRequest
6 голосов
/ 29 апреля 2010

Я недавно столкнулся с проблемой. Мое приложение для iPad каким-то образом препятствует автоматическому вращению iPad. Мое приложение загружает UISplitView с обоими контроллерами представления, возвращающими YES для shouldAutorotateToInterfaceOrientation :. Я настроил свой info.plist для включения ключа «Поддерживаемые ориентации интерфейса» со всеми четырьмя ориентациями. Однако при запуске приложения вращение устройства не вращает splitView (даже если я получаю UIDeviceOrientationDidChangeNotification). Кроме того, когда я выхожу из приложения в другой ориентации, которая была запущена на главном экране iPad, он не автоматически поворачивается к правильному представлению, пока я не поверну его снова, пока приложение не запущено .... Любые идеи будут высоко оценены ... .

Ответы [ 6 ]

8 голосов
/ 01 сентября 2010

UISplitViewController - один из самых темпераментных подклассов контроллера представления, которые мне когда-либо приходилось использовать. Для того, чтобы он работал «идеально», он должен существовать как единое корневое представление в окне вашего приложения. Однако вы можете обойти это с помощью некоторой хитрости - в моем случае мне потребовался UITabBarController как минимум с двумя различными UISplitViewController s в качестве контроллеров представления - но тогда вам нужно позаботиться о странных случаях, включающих вращение и UISplitViewControllerDelegate обратные вызовы не срабатывают.

Мы надеемся, что в будущем Apple сделает UISplitViewController более совместимым с другими UIKit компонентами ...

5 голосов
/ 25 февраля 2011

Я столкнулся с той же проблемой с двумя подчиненными UINavigationControllers. В моем случае вращение начало работать после того, как я переопределил mustAutorotateToInterfaceOrientation: в левом контроллере всегда возвращать «YES».

2 голосов
/ 05 июня 2013

Я нашел, что это работает нормально - при условии, что ОБА дети UISplitViewController реализуют shouldAutorotateToInterfaceOrientation:

То есть, если у вас есть что-то вроде:

        MasterViewController *masterViewController = [[MasterViewController alloc] initWithNibName:@"MasterViewController_iPad" bundle:nil];
        UINavigationController *masterNavigationController = [[UINavigationController alloc] initWithRootViewController:masterViewController];

        DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController_iPad" bundle:nil];
        UINavigationController *detailNavigationController = [[UINavigationController alloc] initWithRootViewController:detailViewController];

        self.splitViewController.viewControllers = @[masterNavigationController, detailNavigationController];

       self.window.rootViewController = self.splitViewController;

для определения rootViewController вашего NSApplication тогда и MasterViewController, и DetailViewController должны реализовать:

(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
    return YES;
}

, чтобы убедиться, что вращение работает.

1 голос
/ 25 июня 2010

Ваш UISplitViewController установлен в качестве корневого контроллера представления? Если нет, то это может быть причиной вашей проблемы. У меня была похожая проблема - строка состояния будет вращаться, но мои детализация и основные виды останутся на месте. Я переставил представления так, чтобы UISplitViewController был корневым, а затем мое «главное меню» было представлено как модальный контроллер представления поверх разделенного представления, и это позволило устранить проблему вращения.

Согласно руководству по программированию для iPad , «представление контроллера разделенного вида всегда должно быть установлено как корневое представление окна приложения».

Надеюсь, это поможет.

0 голосов
/ 13 июня 2010

У меня была такая же проблема прямо сейчас.Причина была в том, что я случайно добавил другой вид в окно в дополнение к представлению UISplitViewController.Удаление лишнего вида заставило его работать.

0 голосов
/ 27 мая 2010

Вы сказали, что ваша первая проблема заключается в том, что UISplitView не позволяет вам выполнять авторутинг. Вместо этого попробуйте использовать подкласс Splitview, который включает в себя автоповорот:

@implementation SplitViewControllerRotating
- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation{
    NSLog(@"SplitViewControllerRotating shouldAutorotate");
    return YES;
}
@end

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

...