多个UIViewControllers同时

问题描述:

我想在导航控制器中占用整个屏幕的UITableView。我有一个较小的自定义UIView,它需要从底部向上滑动,将桌面视图挤压100像素。自定义视图需要是静态的,而不是在用户浏览tableview时移动。我被告知不要让2个UIViewControllers(VC)在同一个屏幕上管理视图。多个UIViewControllers同时

目前,我的AppDelegate添加一个子视图从一个VC,然后加载用的tableview和自定义视图其窗口

[自addSubview:tablviewcontroller.view]。 [self addSubview:customViewController.view];

这应该如何实施?

我的构造方式如下: 有一个UIViewController子类,它的视图占据了整个屏幕。它将有两个子视图。第一个子视图:包含您的表视图控制器的UINavigationController的视图。 第二个子视图:自定义的UIView。

最初是否将UINavigationController的框架设置为主视图控制器视图的全部边界以及屏幕可见区域下方的自定义视图框架。

当您需要向上滑动视图时,请使用UIView动画通过降低高度并更改自定义UIView的框架来更改UINavigationController视图的框架,方法是将它的y坐标更改为框内。

好的。您需要一个导航控制器,其根视图是一个表视图。然后,通过用户输入,您可能希望此表格视图上移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]; 
} 

挤了整个导航/表的东西,最简单的方法是修改导航控制器的整体框架,这就是为什么你需要一个单独的视图(在导航控制器之外)的其他视图。