Bitte beachten Sie meine Frage zu diesem Thema hier:
Beste Möglichkeit, zwischen UISplitViewController und anderen Viewcontrollern zu wechseln?
Wenn Sie den UISplitViewController so verwenden, wie Apple es beabsichtigt, ist er ziemlich eingeschränkt.
Ich endete mit einer Strategie genau wie Sie erwähnen - d.h. entfernen Sie die UISplitViewController-Ansicht von UIWindow, und ersetzen Sie mit einem anderen, und dann später zurück wechseln. Ich fand heraus, dass die Orientierungsänderung behandelt wurde, auch wenn ich gedreht, während Ansicht B dargestellt wurde (B ist die nicht geteilte Ansicht), dann wechseln Sie zurück zu A (die geteilte Ansicht). Allerdings musste ich ein wenig an der Rahmengröße der geteilten Ansicht herumschrauben, damit es funktionierte. Ich werde später mit mehr Informationen aktualisieren, wenn ich sie finde.
Es gibt auch die Möglichkeit, einen eigenen Split-View-Controller zu schreiben oder die Neuimplementierung eines anderen Anbieters zu verwenden, wie z. B. diesen:
http://mattgemmell.com/2010/07/31/mgsplitviewcontroller-for-ipad
アップデイト
Die Fummelei, die ich mit der Rahmengröße von UISplitView gemacht habe, ist in der folgenden Methode in meinem AppDelegate zu sehen. Diese Methoden dienen der Darstellung des Split View Controllers, indem sie einen anderen Top-Level View Controller unter UIWindow ersetzen:
- (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];
}
}
Wie gesagt, es ist ein Hack, aber die Korrektur des Rahmens gab mir die Möglichkeit, die geteilte VC zu präsentieren, ohne dass der Rahmen manchmal falsch ist. Und wie ich bereits erwähnt habe, gehen wir damit über das hinaus, was Apple von uns verlangt, daher die Hackerarbeit.