私は自分のアプリで非常にイライラする問題を解決しようとしています - それを調べていると、iOS にバグが見つかった可能性があります。
iPad を回転するとビューは回転しますが、フレームは変わりません。ビューの幅と高さを毎秒出力するタイマーを実行しています。ビューが視覚的に回転するのはわかりますが、フレームは何があっても「768x1024」のままです。
Appleのドキュメントから:
ユーザー インターフェイスが回転すると、新しい向きに合わせてウィンドウのサイズが変更されます。ウィンドウは、そのルート ビュー コントローラーのフレームを新しいサイズに合わせて調整し、このサイズはビュー階層を下って他のビューに伝達されます。
これはまさに起こっていないことであり、あらゆる種類の問題を引き起こしています. フレームが変わるように回転を修正する方法を知っている人はいますか?
再現する手順:
- 新しい空のプロジェクトを作成する
- ボーン ストック UIViewController をルート ビューとして追加します。
- ルート ビュー コントローラーのフレームの幅と高さを出力するタイマーを設定します。
- アプリを実行し、全体を回転させます。これが私がテストしている私のコードです:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] 境界]]; self.window.rootViewController = [[UIViewController alloc] init]; NSLog(@"%fx%f", self.window.rootViewController.view.frame.size.width, self.window.rootViewController.view.frame.size.height); // 向きを確認するラベルを追加 UILabel *orientationLabel = [[UILabel alloc] initWithFrame:CGRectMake(10,10,100,30)]; orientationLabel.text = @"左上"; [self.window.rootViewController.view addSubview: orientationLabel]; [NSTimer scheduleTimerWithTimeInterval:.3 target:self selector:@selector(testScale) userInfo:nil repeats:YES]; self.window.backgroundColor = [UIColor whiteColor]; [self.window makeKeyAndVisible]; はいを返します。 }
- (無効) testScale { NSLog(@"%fx%f", self.window.rootViewController.view.frame.size.width, self.window.rootViewController.view.frame.size.height); }