0

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

我的方法中有以下代码:

-(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,但没有效果。

4

1 回答 1

0

好吧,似乎一个很小的变化就修复了它。我注意到导航按钮上的代码在“动画”下的视图更改为“是”,而 willAnimateRotationToInterfaceOrientation 为“动画:否”。我将其更改为“是”并修复了它。还不知道为什么,也许它会影响方法显示视图的方式或影响加载顺序,但它确实存在。

于 2013-10-14T19:19:19.460 回答