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 に変更しようとしましたが、効果がありません。