Пожалуйста, смотрите мой вопрос по этому вопросу здесь:
Лучший способ переключения между UISplitViewController и другими контроллерами представления?
Если вы используете UISplitViewController в соответствии с намерениями Apple, он весьма ограничен.
Я закончил тем, что использовал стратегию, точно такую, как вы упомянули - то есть удалите представление UISplitViewController из UIWindow, замените его другим, а затем переключитесь обратно. Я обнаружил, что изменение ориентации БЫЛО обработано, даже если я повернулся во время представления вида B (B - вид без разделения), а затем переключился обратно на A (вид разделения). Однако, чтобы заставить его работать, мне пришлось немного поиграться с размером фрейма в uisplitview. Обновлюсь с дополнительной информацией позже, когда я найду это.
Существует также возможность написания вашего собственного контроллера разделенного представления или использования переопределения кого-то другого, такого как этот:
http://mattgemmell.com/2010/07/31/mgsplitviewcontroller-for-ipad
UPDATE
Трек, который я сделал с размером кадра UISplitView, можно увидеть в следующем методе в моем AppDelegate. Эти методы предназначены для представления контроллера разделенного представления путем замены другого контроллера представления верхнего уровня в UIWindow:
- (void)removeAllWindowSubviews {
for (UIView *childView in window.subviews) {
[childView removeFromSuperview];
}
}
- (void)presentSplitView:(UISplitViewController *)vc {
[self removeAllWindowSubviews];
UIView *viewForSplitVC = vc.view;
// fix for deficiency in adding a split view controller's view in landscape mode
// and it still having a frame for portrait mode.
// 2010-10-15 added -20.0f to fix problem with toolbar in LHS VC being 20 pix too low.
viewForSplitVC.frame = CGRectMake(viewForSplitVC.frame.origin.x, viewForSplitVC.frame.origin.y,
navigationController.view.bounds.size.width, navigationController.view.bounds.size.height - 20.0f);
[window addSubview:viewForSplitVC];
}
// for removing the split view and restoring the other main VC
- (void)restoreMenu {
if (isIPad()) {
[self removeAllWindowSubviews];
[window addSubview:navigationController.view];
}
}
Как я уже сказал, это взлом, но исправление фрейма дало мне возможность представить разделенный VC без порочного фрейма. И, как я уже отмечал ранее, выполняя эту работу, мы выходим за пределы того, что Apple хочет, чтобы мы делали, и, следовательно, замешаны в этом.