在方向更改期间iOS大小调整UITableView

时间:2013-10-14 18:56:11

标签: ios uitableview

我有一个有两个表的视图。在故事板中,我有两个独立的视图,一个是水平的,另一个是垂直的。当我需要导航到视图时,代码会检测方向并调出相应的视图(并在方向更改时执行此操作。

我的方法中有以下代码:

-(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,以免生效。

1 个答案:

答案 0 :(得分:0)

嗯,这似乎是一个非常小的变化修复它。我注意到导航按钮上的代码在视图更改的“animate”下为YES,而willAnimateRotationToInterfaceOrientation为“animated:NO”。我将其更改为“是”并修复了它。不确定为什么,也许它会影响方法显示视图的方式或影响加载顺序,但它确实如此。