2010-08-29 43 views
2

前提是非常簡單的:我想顯示在使用一個UISplitViewController iPad程序模態的視圖。ipad公司黜模態的視圖攪亂UISplitView面板

視圖層次是直接的:

           /- TableViewController1 
        /- root:TabBarController -- TableViewController2 
SplitViewController - 
        \- detail:CustomViewController 

當我點擊在TableViewController1表格單元格中的一個,我打開一個模式的看法:

- (void)tableView:(UITableView *)tv didSelectRowAtIndexPath:(NSIndexPath *)ip { 
    UIViewController *vc = [[MyModalClass alloc] init]; 
    UINavigationController *nc = [[UINavigationController alloc] 
           initWithRootViewController:vc]; 
    nc.modalPresentationStyle = UIModalPresentationFormSheet; 
    nc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 
    [self presentModalViewController:nc animated:true]; 
    [nc release]; 
    [vc release]; 
} 

這只是正常:在出現視圖。當我試圖以除風景之外的任何方向來解決問題時,問題就開始了。

在ModalViewController,下面的方法是通過UITabBarButton導航欄觸發:

- (void) closeButtonInNavBarWasClicked:(id)sender { 
    [self dismissModalViewControllerAnimated:true]; 
} 

,這就是問題的開始。

當該代碼被調用時,模態視圖中消失,但是:在TabBarController(分割視圖的根視圖)是突然旋轉並調整大小。內容突然橫向,部分涵蓋了細節視圖。細節視圖不會調整爲較小,它只是部分覆蓋了根視圖。

唯一的情況下這個問題不會出現的是當我在TableViewController1電池接頭時,應用程序處於縱向模式。儘管popover中存在根視圖(這可能是一個充足的bug源),但一切正常。

有些東西我已經嘗試,沒有成功:

  • 轉儲標籤欄,只是顯示TableViewController1作爲分割視圖
  • 的根控制器創建委託協議,使得父TableViewController1駁回模態視圖而不是MyModalClass視圖本身。
  • 在TableViewController1.splitViewController上呈現/解除模態視圖實際上讓事情變得更糟:視圖甚至沒有出現。
  • 犧牲幾隻山羊也沒有幫助。

我會感激巨大在這個問題上的任何輸入。

回答

0

我有一個排序的回答我自己的問題:我用儀器來系統地消除在我的應用程序所有的內存泄漏。一旦我做完了,問題就消失了。

0

我有同樣的問題,因爲你,我解決它通過編程臨時強制旋轉我的viewController呈現(一旦回到了它),在其viewDidAppear方法的一些任意旋轉。當然沒有動畫。然後將其旋轉回想要的方向(我在旋轉之前保存的方向)。

所以如果VC1顯示器VC2模態,並且用戶旋轉VC2我通過調用設置爲根據VC2的當前定向的VC1的取向: UIInterfaceOrientation currentOrientation =自我。interfaceOrientation; //存儲vc2的當前方向(模態視圖) [vc1 willRotateToInterfaceOrientation:currentOrientation duration:0];

然後我dissmiss VC2和VC1的viewWillAppear中我這樣做:

- (空)viewDidAppear:(BOOL)動畫{

[super viewDidAppear:animated]; 

/* Store wanted orientation */ 
UIInterfaceOrientation currentOrientation = self.interfaceOrientation; 

/* rotate to some arbitrary orientation, this solves the bug. */ 
[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationPortraitUpsideDown animated:NO]; 

[[UIDevice currentDevice] setOrientation:currentOrientation animated:NO]; //restore wanted orientation. 

}