好的。你需要一个导航控制器,它的根视图是一个表格视图。然后,可能通过用户输入,您希望此表格视图向上滑动 100 像素,并在底部出现另一个视图。当其他视图保留在那里时,用户可以继续使用表格视图。
我会这样做:
创建一个通用视图控制器(我们称之为NavigationWithAuxiliaryViewController)。这个类的根视图覆盖了你所有的应用程序窗口。
这个视图有一个UINavigationController的实例作为它的属性,比如navController。它还有一个 UIView(用于其他视图)作为其属性(例如,auxView)。将另一个视图放在底部。但是,默认情况下此视图是隐藏的。另外,UINavigationController 的根视图的框架覆盖了整个视图。
当你决定压缩表格视图时,修改 UINavigationController 的frame 属性。做这样的事情(虽然不是这么丑):
if (slideViewOn) {
[UIView beginAnimations:@"slideUp" context:nil];
navController.view.frame = CGRectMake(0, 0, 320, 260);
auxView.hidden = NO;
[UIView commitAnimations];
} else {
[UIView beginAnimations:@"slideDown" context:nil];
navController.view.frame = CGRectMake(0, 0, 320, 480);
auxView.hidden = YES;
[UIView commitAnimations];
}
压缩整个导航/表格内容的最简单方法是修改导航控制器的整个框架,这就是为什么您需要一个单独的视图(在导航控制器之外)用于另一个视图。