1. ホーム
  2. ios

[解決済み] iOS8では、[UIScreen mainScreen].bounds.size は方向依存になるのでしょうか?

2022-04-20 01:51:07

質問

以下のコードをiOS 7とiOS 8の両方で実行しました。

UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
BOOL landscape = (orientation == UIInterfaceOrientationLandscapeLeft || orientation == UIInterfaceOrientationLandscapeRight);
NSLog(@"Currently landscape: %@, width: %.2f, height: %.2f", 
      (landscape ? @"Yes" : @"No"), 
      [[UIScreen mainScreen] bounds].size.width, 
      [[UIScreen mainScreen] bounds].size.height);

以下は、iOS 8の結果です。

Currently landscape: No, width: 320.00, height: 568.00
Currently landscape: Yes, width: 568.00, height: 320.00

iOS 7での結果と比較する。

Currently landscape: No, width: 320.00, height: 568.00
Currently landscape: Yes, width: 320.00, height: 568.00

この変更を明記したドキュメントはありますか?それともiOS 8のAPIの一時的なバグなのでしょうか?

解決方法を教えてください。

はい、iOS8では方向依存であり、バグではありません。詳しくはWWDC2014のセッション214をご覧になってみてください。 iOS 8におけるビューコントローラの進化"

プレゼンテーションからの引用です。

UIScreenはインターフェース指向になりました。

  • [UIScreen bounds] がインターフェース指向になりました。
  • [UIScreen applicationFrame] インターフェース指向になりました。
  • ステータスバーフレームの通知がインターフェイス指向に
  • キーボードのフレーム通知はインターフェイス指向