2011-02-16 49 views
0

我有一個子視圖控制器,無論父視圖處於哪種模式,都需要始終以橫向模式顯示。我將它添加到父視圖堆棧中旋轉視圖在一側留下20個像素空隙

[[self navigationController] pushViewController:controller animated:NO]; 

我試圖強制視圖旋轉並顯示,就好像設備在橫向方向保持,即使它仍然保持在縱向方向。

唯一的問題是,無論我設置視圖框的大小和座標是多少,我都會在屏幕右側出現一個20像素的間隙,StatusBar曾經是人像模式期間的間隙。

我可以調整什麼以確保這個差距消失?

以下是我正在做的轉換(推薦by this SO article

- (void)changeOrientationToLandscape 
{ 
    UIApplication *myApp = [UIApplication sharedApplication]; 

    CGAffineTransform landscapeTransform = CGAffineTransformMakeRotation(degreesToRadian(90)); 
    landscapeTransform = CGAffineTransformTranslate(landscapeTransform, +90.0, +90.0); 
    [self.view setTransform:landscapeTransform]; 

    // Change the status bar orientation so it's shown as if we're in landscape 
    myApp.statusBarOrientation = UIInterfaceOrientationLandscapeLeft; 

    // Manually force view frame - this doesn't seem to fix the 20 pixel gap 
    self.view.frame = CGRectMake(0, 0, 480, 320); 
} 

我看到的視圖佔據整個屏幕,並沒有20像素差距的唯一情況是,如果我隱藏狀態欄的所有一起,我不能爲這個應用程序做。

下面是屏幕的外觀(使用底部的home按鈕以縱向方式保持)。注意狀態欄的末端沒有相同的紫色背景 - 我希望我可以將視圖轉移到白色的空白處。

我還打印出視圖和navigationController的視圖框架,它們都報告 x和y位置爲0,0。導航視圖框架的報告尺寸爲320x480,而視圖的框架爲480x320。

View shifted with 20 pixel gap at top

回答

0

什麼禁用狀態欄,當孩子被壓並啓用時,它的「彈出」?

+0

如何禁用狀態欄?我只看到將其設置爲隱藏或可見的選項。我確實需要在子控制器中可見的狀態欄。 – 2011-02-16 17:10:43

+0

如果您在推動孩子之前將其隱藏在父母身上?我想你可以在那之後再次展示給孩子們(並且在解僱孩子時撤消一切)。 – 2011-02-16 19:01:11

0

只能隱藏您的子視圖控制器的狀態欄。

如果你推通過self.navigationController你的孩子視圖控制器,只需覆蓋shouldAutorotateToInterfaceOrientation兒童視圖控制器,並把這個...

return UIInterfaceOrientationIsLandscape(interfaceOrientation); 

...身體這種方法,使其景觀只要。