2013-09-24 50 views
2

在iOS 5及6我在viewWillAppear中的方法在我的視圖控制器這樣做:力橫向

UIViewController *c = [[UIViewController alloc] init]; 
//To avoid the warning complaining about the view not being part of the window hierarchy 
[[[TWNavigationManager shared] window] addSubview:c.view]; 
[self presentModalViewController:c animated:NO]; 
[self dismissModalViewControllerAnimated:NO]; 
[c.view removeFromSuperview]; 

我也是在應用程序委託添加了這個方法

- (NSUInteger)application:(UIApplication *)application  supportedInterfaceOrientationsForWindow:(UIWindow *)window 
{ 
    return [[TWNavigationManager shared] supportedInterfaceOrientationsForTopViewController]; 
} 

基本上將該調用轉發給頂視圖控制器。

這導致我的視​​圖控制器被調用自動旋轉方法,然後我能夠強制只是該視圖控制器的橫向方向。 現在在iOS 7中,代碼無法工作了。白色視圖全屏顯示。

什麼是iOS7的正確方法?

在此先感謝。

+0

你從哪裏提出這個lanscape-only-viewController?它是導航堆棧中的「推」還是模態地呈現的視圖控制器?在這種情況下,它更容易) – Vinzzz

+0

是的,這是一個推動導航堆棧。我的根視圖控制器是一個UITabBarViewController,每個項目都有一個UINavigationController。 – mdonati

回答

5

有同樣的問題,並設法通過解除所呈現的模態視圖動畫:是的。

[self dismissViewControllerAnimated:YES completion:nil]; 

希望幫助!

0

我的解決方案涉及安德烈Finayev建議,但也必須設置另一種過渡風格,否則我在解僱動畫完成後變得空白屏幕。

UIViewController *mVC = [[UIViewController alloc] init]; 
mVC.modalPresentationStyle = UIModalPresentationFullScreen; 
mVC.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; 
[self.navigationController presentViewController:mVC animated:NO completion:^{ 
    [self.navigationController dismissViewControllerAnimated:YES completion:^{ 

    }]; 
}]; 
0

爲了防止小從mdonia解決方案「閃爍」,我加了一個dispatch_after,並能夠與動畫駁回虛擬語氣的viewController:NO

UIViewController *dummyModalVC = [UIViewController new]; 
[dummyModalVC setModalPresentationStyle:UIModalPresentationFullScreen]; 
[dummyModalVC setModalTransitionStyle:UIModalTransitionStyleCrossDissolve]; 
[dummyModalVC.view setBackgroundColor:[UIColor purpleColor]]; 

[self presentViewController:dummyModalVC animated:NO completion:^{ 
    double delayInSeconds = 0.001f; 
    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)); 
    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ 
     [dummyModalVC dismissViewControllerAnimated:NO completion:^{}]; 
    }); 
}]; 

當然看起來仍然像一個醜陋的解決方法,但我沒有找到在給定的時間內更好的解決方案...;(