我有一个有两个表的视图。在故事板中,我有两个独立的视图,一个是水平的,另一个是垂直的。当我需要导航到视图时,代码会检测方向并调出适当的视图(并在方向更改时这样做。
我的方法中有以下代码:
-(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);
}
}
当我按下按钮导航到视图时,这非常有效。它将所有单元格高度相加并使第一个表格成为适当的高度,然后将第二个表格移动到第一个表格下方 50 像素。它还确保第二个表格不会超出可见屏幕区域。
当方向改变时,我执行以下代码:
-(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 所做的相同:更改为 InitViewController,同时在 ini.location 变量中将 StoryboardID 发送给它。导航按钮的代码与 willAnimateRotationToInterfaceOrientation 中的代码几乎相同。InitViewController 然后确定方向并将应用程序发送到正确的故事板 UIView。
它确实将它发送到正确的视图,我可以根据表格宽度来判断。它不做的是更改第一个(顶部)表 table1 的高度。第一个表格保留了它在情节提要中给出的大小。
如果您认为我需要发布代码区域以获得更好的图片,请告诉我,我很乐意添加它。任何帮助、见解,甚至只是试错建议都将不胜感激。
*注意:我尝试将 willAnimateRotationToInterfaceOrientation 更改为 ViewDidLayoutSubviews,但没有效果。