0

2 つのテーブルを持つビューがあります。ストーリー ボードには、水平方向と垂直方向の 2 つの個別のビューがあります。ビューに移動する必要がある場合、コードは向きを検出し、適切なビューを表示します (向きが変わるとそうします。

メソッドに次のコードがあります。

-(void)viewDidAppear:(BOOL)animated{
    UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;
    if(orientation == UIInterfaceOrientationLandscapeLeft || orientation == UIInterfaceOrientationLandscapeRight){
    if(tableHeight2 > 324){
        tableHeight2 =325;
    }
    table1.frame = CGRectMake(table1.frame.origin.x, table1.frame.origin.y, table1.frame.size.width, tableHeight1);
    table2.frame = CGRectMake(table2.frame.origin.x, table1.frame.origin.y + 20 + tableHeight1, table2.frame.size.width, tableHeight2);
}else {
    if(tableHeight2 > 500){
        tableHeight2 = 500;
    }
    table1.frame = CGRectMake(table1.frame.origin.x, table1.frame.origin.y, table1.frame.size.width, tableHeight1);
    table2.frame = CGRectMake(table2.frame.origin.x, table1.frame.origin.y + 50 + tableHeight1, table2.frame.size.width, tableHeight2);
}

}

ボタンを押してビューに移動すると、これはうまく機能します。すべてのセルの高さを合計して、最初のテーブルを適切な高さにし、2 番目のテーブルを最初のテーブルの 50 ピクセル下に移動します。また、2 番目のテーブルが表示可能な画面領域を超えないようにします。

向きが変わると、次のコードが実行されます。

-(void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)orientation duration:(NSTimeInterval)duration {

    InitViewController *ini;
    ini = [self.storyboard instantiateViewControllerWithIdentifier:@"Init"];
    ini.location = MenuName;
    [self presentViewController:ini animated:NO completion:nil];
}

これは、barbuttonitem を押すのと同じことを行う必要があります: ini.location 変数で StoryboardID を送信しながら、InitViewController に変更します。ナビゲーション ボタンのコードは、willAnimateRotationToInterfaceOrientation のコードとほとんど同じです。次に、InitViewController は向きを決定し、アプリを正しいストーリーボード UIView に送信します。

それは正しいビューに送信されます。テーブルの幅に基づいてわかります。行わないのは、最初の (一番上の) テーブルである table1 の高さを変更することです。最初のテーブルは、ストーリーボードで指定されたサイズを保持します。

より良い画像を得るために投稿する必要があると思われるコードの領域がある場合は、喜んで追加します。ヘルプ、洞察、または試行錯誤の提案をいただければ幸いです。

*注: willAnimateRotationToInterfaceOrientation を ViewDidLayoutSubviews に変更しようとしましたが、効果がありません。

4

1 に答える 1

0

まあ、それは非常に小さな変更で修正されたようです。ナビゲーション ボタンのコードで、ビュー変更の「animate」の下に YES があり、willAnimateRotationToInterfaceOrientation が「animated:NO」であることに気付きました。「YES」に変更したところ、修正されました。理由はまだわかりませんが、メソッドがビューを表示する方法やロード順序に影響を与える可能性がありますが、それはあります。

于 2013-10-14T19:19:19.460 に答える