這是一篇舊帖子,但是因爲它尚未解決。我想分享我的解決方案,對於任何其他可能頭痛的人。
目標: UINavigationController和堆棧中的大多數viewcontrollers固定在縱向,除了堆棧中的一個viewcontroller被允許旋轉到縱向和橫向。
問題: 直觀地,我通過檢查topViewController是否爲rotableViewController來設置選擇性的shouldAutorotateToInterfaceOrientation。但是,在風景模式下從rotableViewController回彈後,導航控制器現在以橫向模式顯示,儘管不允許。
解決方案:殺手將禁止旋轉viewWillAppear
,並且當前&關閉一個沒有動畫的modalViewController。
- appViewController作爲主機 viewController添加到窗口中,即,Rooter比RootViewController;
- 將navigationController添加到appViewController,並將 委託設置爲appViewController;
- 在AppViewController
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
if (interfaceOrientation == UIInterfaceOrientationPortrait) return YES;
return canRotate;
}
- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
[viewController viewDidAppear:animated];
canRotate = ([navigationController.topViewController isKindOfClass:[MyRotatable class]]);
}
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
[viewController viewWillAppear:animated];
if (![navigationController.topViewController isKindOfClass:[MyRotatable class]]) {
canRotate = NO;
UIViewController * blanck = [[UIViewController alloc] initWithNibName:nil bundle:nil];
[self presentModalViewController:blanck animated:NO];
[self dismissModalViewControllerAnimated:NO];
[blanck release];
}
}
我相信有應用程序的例子(大概)在應用程序商店中使用setOrientation。一個是Tweetie,它可以在寫推文時強制風景鍵盤。也許他們逃避了它,因爲它不是默認設置。 – 2009-06-09 15:50:50
現在是2014年,這個問題仍然發生在ios 8上。有沒有人找到真正的答案,但這個問題看起來不像黑客? – 2014-10-31 16:17:59