2017-01-11 9 views
4

when first entry, the result like thisIOSランドスケープ・オリエンテーションの画面は、これはViewControllerをするためのコードで

App into the background and back, the orientation is normal

結果:私はなぜ知らない

DDYLoveAutoHallViewController *autoHallViewController = [[DDYLoveAutoHallViewController alloc] initWithEvent:room.currentEventID type:AHRoom_System]; 
[self presentViewController:autoHallViewController animated:YES completion:nil]; 

、プロジェクトは古いゴミがあります以前はiOS5をサポートしています。あなたはレイアウトを管理しない、正確な理由を与えることは困難である方法についての理解がなければ

+0

お願いします。あなたの質問は明確ではありません。この問題は、ViewControllerの作成方法とは関係ありません。 –

+0

はい、ViewControllerを表示すると、最初の画像のように画面が表示され、アプリをバックグラウンドに戻してアプリを戻すと、向きが通常の表示になり、supportedInterfaceOrientations関数には実装があります。 – pfjhetg

+0

DDYLoveAutoHallViewControllerで制約の管理や方向の処理方法をコードで表示できますか? –

答えて

1

、あなたの問題の原因となった、しかし、私は少しアドバイスのご夫婦を提案することができます:

  • が再チェックの向きにしてみてください - (void)viewDidLayoutSubviews、そこから物事を再配置することができます。 (おそらくそれは動作し、あなたの問題を解決するが、それはきれいにすることができることを知っているので、それはあなたがそれをきれいにすることができることを知っているので、非常にクリーンな解決策ではない)

  • レイアウトライフサイクル物事がどこに間違っているのかを検出する。現代的な方法でiOSのレイアウトを深めてください。 (よりよい解決策)

0

はあなたの特定の問題についての詳細がなければ、そしてどのように検出し、向きを調整している、正確な問題を理解するのは難しいですが、ここでのiOSでの作業、私が作ったいくつかの観測されています

[1] iOSの以前のバージョンでは、実際にハードウェアに問い合わせてから向きやアプリケーションのフレームサイズ情報を判断する前に、いくつかのデフォルトを設定していました。

a)初期設定の向きは、初期設定時にポートレートの向きの枠の寸法とともに、PORTRAITに設定されます。 (デバイスが横向きの場合は誤っているため、この初期情報を使用しないでください)。 (以前の "iPhoneの唯一の日"から残して - 私は推測する)

b)これは "ViewDidLoad"と "applicationDidBecomeActive"タイムフレームで間違っています。 )

c)「didChangeStatusBarOrientationメソッド呼び出し」によって、正しい向きが後で生成されます。この情報をWindow.frame.size情報と共に使用して、正しいサイズの正しいイメージを表示することができます。 これは事実上オリエンテーション要求が正しいことを示すトリガです。 「didChangeStatusBarOrientation」メッセージが受信されるまで何も表示しようとしないでください。

[2]非コードソリューション:

a)はアプリが常に横向きで動作するように設計されている場合、これはアプリの設定に反映されていることを確認/情報:(サポートされているインタフェースの向き設定を使用して) .plist。私は、1つの "サポートされているインターフェイスのオリエンテーション"を許可することをお勧めします、それはランドスケープであり、すべてのビューはランドスケープのサイズと方向を反映します(コードが特にオリエンテーションで何かを設定していない場合、このオプションを選択しないと、おそらく役に立ちません。)

[3]最終ソリューション:

A)あなたはベースのiOSバージョン高く変更することができた場合は、iOS6と大きいバージョンでは、以前の初期化サイクルの配向とフレームサイズを初期化し、その問題がちょうど消えることがありますこれによると。

ここ

は、以下の出力と一緒にこれを発見するために使用されるコードの一部、(この場合には、サンプルとしてオリジナルのiPadを使用して...のiOS 5.1.1を実行している - 風景に始まり、向きが変化しなかった)である

-(void) OrientationAndScreenSizeHELPER : (NSString *)fromObject 
{ 
    //from: 

    // NSLog(@"%s:%d someObject=%@", __func__, __LINE__, someObject); 


    CGRect appFrame = [[UIScreen mainScreen ]applicationFrame];//using frame so status bar is not part of calculations. 

    appFrame = [[self.viewController view]frame];//using frame so status bar is not part of calculations. 

    UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation]; 

    NSLog(@"orientation[%ld] at time[%@] width[%ld] height[%ld]", 
     (long)orientation, 
     fromObject, 
     (long int)appFrame.size.width, 
     (long int)appFrame.size.height); 

} 

**Output:** 
orientation[1] at time[ViewDidLoad Orientation] width[768] height[1024] 
orientation[1] at time[applicationDidBecomeActive] width[768] height[1024] 
orientation[3] at time[didChangeStatusBarOrientation] width[1024] height[768] 
関連する問題