2

我正在编写一个自定义的 UITabBarController,这样我就可以完全控制标签栏的外观。我已经完成了所有工作,所以我有一组可以处理的视图控制器。

控制器有一个填满屏幕的主视图,在它里面它的底部有一个 UIView 用于标签栏。该选项卡栏视图为每个视图控制器都有一个按钮。当按下按钮时,我将视图控制器的视图添加到主视图,并设置它的框架,使其不覆盖标签栏视图:

controller.view.frame = CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height - kTabBarHeight);

这一切都很好,我可以很好地在视图控制器之间滑动。但是,当我呈现一个模态视图控制器,然后将其关闭时,当前视图控制器的视图变为全屏并覆盖了我的标签栏!我尝试将自动调整大小的蒙版设置为不调整大小,但一直在发生。

我还尝试使用以下方法将视图控制器视图添加到底部(标签栏下方):

[self.view insertSubview:controller.view atIndex:0];

但是当我这样做时,标签栏甚至在任何模式视图上方都可见!这很奇怪。我认为有些东西我不明白,所以如果有人能解释我所缺少的,我将不胜感激!

谢谢,

麦克风

4

3 回答 3

2

尝试设置

controller.view.frame = CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height - kTabBarHeight); 

在控制器的 viewWillAppear 方法中

于 2009-09-16T13:36:24.707 回答
2

试试这个。我认为您想要标签栏控制器中的动态视图控制器。

-(void)applicationDidFinishLaunching:(UIApplication *)application {

// Add the tab bar controller's current view as a subview of the window
tabBarController.delegate=self;
tabBarController=[[UITabBarController alloc] init];

mainDashBoard=[[DashBoard alloc] initWithNibName:@"DashBoard" bundle:nil];
mainSearchView=[[SearchView alloc] initWithNibName:@"SearchView" bundle:nil];
mainMoreView=[[MoreView alloc] initWithNibName:@"MoreView" bundle:nil];

UINavigationController *nvCtr0=[[[UINavigationController alloc] init] autorelease];
UINavigationController *nvCtr1=[[[UINavigationController alloc] initWithRootViewController:mainDashBoard] autorelease];
UINavigationController *nvCtr2=[[[UINavigationController alloc] initWithRootViewController:mainSearchView] autorelease];
UINavigationController *nvCtr3=[[[UINavigationController alloc] initWithRootViewController:mainMoreView] autorelease];
UINavigationController *nvCtr4=[[[UINavigationController alloc] init] autorelease];//[[[UINavigationController alloc] initWithRootViewController:nil] autorelease];

tabBarController.viewControllers=[NSArray arrayWithObjects:nvCtr0,nvCtr1,nvCtr2,nvCtr3,nvCtr4,nil];

nvCtr0.tabBarItem.enabled=NO;
nvCtr4.tabBarItem.enabled=NO;

[window tabBarController.view];
}
于 2009-09-17T19:24:56.827 回答
2

我已经设法找到一种更好的方法来控制标签栏的外观,只需将子视图插入标签控制器标签栏的顶部。这是一种享受!

于 2009-09-18T14:24:22.173 回答