Применяя новый UISplitViewController
, я пытаюсь изменить поведение по умолчанию, возникающее при использовании режима UISplitViewControllerDisplayModeAutomatic
.
При работе в портретной ориентации я хочу, чтобы основное наложение скрывалось, когда пользователь запускает нажатие на детальную сторону. По умолчанию оверлей остается на экране до тех пор, пока пользователь не коснется его стороны с подробностями.
Я попытался использовать следующее с делегатом:
- (BOOL)splitViewController:(UISplitViewController *)splitViewController showDetailViewController:(UIViewController *)vc sender:(id)sender
{
if (splitViewController.displayMode == UISplitViewControllerDisplayModePrimaryOverlay) {
[UIView animateWithDuration:0.3 animations:^{
splitViewController.preferredDisplayMode = UISplitViewControllerDisplayModePrimaryHidden;
}];
}
return NO;
}
Это дает мне желаемое поведение в портретной ориентации, но нарушает ландшафтный режим (который я хочу вести себя как UISplitViewControllerDisplayModeAllVisible
). Если вы нажали, а затем повернули устройство, левая сторона по-прежнему скрыта (как и ожидалось). Я не могу найти подходящее место, где можно подключиться, чтобы переустановить предпочтительный режим при вращении, чтобы показать левую сторону (поскольку коллекции черт нельзя использовать для определения альбомной или портретной ориентации на iPad).
Как я могу вручную вызвать закрытие оверлея?
Примечание о дублировании: iOS8 полностью изменился UISplitViewController
, поэтому все другие ответы SO до июня 2014 года, вероятно, неверны (и я перерыл многие из них, на всякий случай)