我有一个有两个表的视图。在故事板中,我有两个独立的视图,一个是水平的,另一个是垂直的。当我需要导航到视图时,代码会检测方向并调出相应的视图(并在方向更改时执行此操作。
我的方法中有以下代码:
-(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相同的操作:在ini.location变量中向其发送StoryboardID时更改为InitViewController。导航按钮的代码与willAnimateRotationToInterfaceOrientation中的代码非常相似。然后,InitViewController确定方向并将应用程序发送到正确的故事板UIView。
它会将它发送到正确的视图,我可以根据表格宽度来判断。 不所做的是改变第一个(顶部)表table1的高度。第一个表保留了故事板中给出的大小。
如果您认为我需要发布代码区域以获得更好的图片,请告诉我们我很乐意添加它。任何帮助,见解,甚至只是试错建议都将不胜感激。
*注意:我已尝试将willAnimateRotationToInterfaceOrientation更改为ViewDidLayoutSubviews,以免生效。
答案 0 :(得分:0)
嗯,这似乎是一个非常小的变化修复它。我注意到导航按钮上的代码在视图更改的“animate”下为YES,而willAnimateRotationToInterfaceOrientation为“animated:NO”。我将其更改为“是”并修复了它。不确定为什么,也许它会影响方法显示视图的方式或影响加载顺序,但它确实如此。