1

このトピックは以前に取り上げられましたが(iPadのモーダルビューコントローラーは横向きですが縦向きで動作します)、明確な答えが見つかりませんでした。したがって、これが重複しているかどうかはわかりません。

新しいシングルビュープロジェクトでは、メインビューをxcodeで横向きに設定しました。

ここに画像の説明を入力してください

そして、プロパティインスペクターはこれを確認します(およびビューがストーリーボードにどのように表示されるか)。

ここに画像の説明を入力してください

また、ViewControllerのorientationプロパティはlandscapeに設定されています。

ここに画像の説明を入力してください

しかし、「viewDidLoad」でビューフレームを確認すると、ポートレートモードが報告されます。

- (void)viewDidLoad
{
    [super viewDidLoad];

    CGRect theRect = self.view.frame;

    NSLog(@" frame %f  %f  %f  %f", theRect.origin.x,
          theRect.origin.y,
          theRect.size.width,
          theRect.size.height);
}

2012-08-26 16:42:45.045テスト[2320:f803]セル0.000000 20.000000 768.000000 1004.000000

また、shouldAutorotateToInterfaceOrientationでランドスケープを強制します。

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return UIInterfaceOrientationIsLandscape(interfaceOrientation);
}

私はこれまで何度もこれに遭遇し、フレームを明示的に横向きに設定する必要がありましたが、ストーリーボードのすべての設定が効果がない理由を理解できませんでした。

ここで基本的なものが欠けていますか?

4

2 に答える 2

1

サポートされているデバイスの向きを指定し、で正しい「答え」を与えた場合でも、iOSのすべてのアプリケーションは最初にポートレートモードで起動しますshouldAutorotateToInterfaceOrientation:。常に縦向きで始まり、デバイスの場合は横向きに回転します。ユーザーは、それがそれほど速く発生するのを見ないかもしれません。shouldAutorotateToInterfaceOrientationこのため、サポートされている向きが横向きのみの場合でも、アプリはを介して回転できる必要があります。

したがって、開始後に横向きにするには、次のことを行う必要があります。

  • XcodesInterfaceBuilderでサポートされているインターフェイスの向きを設定します
  • オーバーライドshouldAutorotateToInterfaceOrientation

- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)io {
    return (io == UIInterfaceOrientationLandscapeRight); 
}
  • インターフェースを回転させ、後でビュー構成を行う機会を与えます

ビューコントローラのランドスケープへのXcode構成に関する質問について:ストーリーボードのメニューのタイトルに注意してください-それは次のように述べています:シミュレートされたメトリック
これは、ストーリーボードでそれをシミュレートするためだけに行うすべての変更を意味します。ただし、コードでこの状態にするために必要な変更を行わない限り、効果はありません。

于 2012-08-26T21:03:59.433 に答える
0

ビューコントローラに以下のコードを追加しますswift 4.2

override var shouldAutorotate: Bool {
    return true
}

override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
    return .landscapeRight
}
于 2018-10-22T14:19:06.733 に答える