【问题标题】:Custom UITabBarController Problems with View Controllers and Views视图控制器和视图的自定义 UITabBarController 问题
【发布时间】:2010-11-28 19:31:07
【问题描述】:

我正在编写一个自定义的 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];

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

谢谢,

迈克

【问题讨论】:

    标签: iphone uiview uiviewcontroller uitabbarcontroller uitabbar


    【解决方案1】:

    尝试设置

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

    在控制器的 viewWillAppear 方法中

    【讨论】:

    • 感谢您的建议,但不幸的是它没有解决!
    【解决方案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];
    }
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 嗨 Bisbo,你有任何代码 sn-ps 可以显示吗?我在与覆盖选项卡栏的第二个选项卡关联的视图中遇到了类似的问题(但在第一个栏上可以正常工作)。 TIA!
      • 如果新标签栏的高度不一样怎么办?你会如何解决这个问题?我在这里发布了一个问题:stackoverflow.com/questions/3766978/custom-uitabbarcontroller 请看看你是否可以回答这个问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-25
      • 1970-01-01
      • 2021-05-24
      • 1970-01-01
      • 2016-09-27
      • 2011-05-15
      相关资源
      最近更新 更多