請在這裏看到關於這個問題,我的問題:
Best way to switch between UISplitViewController and other view controllers?
如果使用UISplitViewController蘋果打算讓你來,這是相當有限的。
我完全按照您提到的方式使用策略 - 即從UIWindow中刪除UISplitViewController的視圖,並替換爲另一個視圖,然後再切換回來。我發現即使旋轉了視圖B(B是非分割視圖),然後切換回A(分割視圖),我也處理了方向改變WAS。但是,我不得不做一些擺脫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沒有能力其框架有時不正確。正如我前面提到的,通過這樣做,我們不在蘋果希望我們做的事情之外,因此涉及到黑客行爲。
雖然我不確定如何解決您的問題,但我遇到了類似於您的問題。問題是,當一個視圖不在主窗口的視圖層次結構中時,它不會在設備旋轉時被告知旋轉。由於UISplitViewController在你被允許使用它的時候非常僵化,所以問題更加嚴重。我很確定它不是從視圖層次結構中刪除並重新添加的。可悲的是,當我想用UISplitViewController做比Apple更多的功能時,我不得不從頭構建我自己的版本。不好玩。 – 2011-03-01 04:10:15
嗯。有沒有辦法將分割視圖控制器留在層次結構中但不可見?或者,除此之外,也許我可以在刪除拆分視圖之前獲取方向,與將要放回的方向進行比較,並在將子視圖添加回來之前告訴其旋轉自己? – Chris 2011-03-01 04:16:32