代码之家  ›  专栏  ›  技术社区  ›  Bryan

添加TabbarController作为视图的子视图

  •  4
  • Bryan  · 技术社区  · 15 年前

    当我的应用程序启动时,我正在加载一个启动屏幕。然后我想加载一个TabbarController,它是ViewControllers。但是,我的TabbarController窗口不能缩放到屏幕大小。

    可能底部的3/4的标签条被切断了,在状态条下面的屏幕顶部有一个大约20像素的狭小间隙。如何正确调整TabbarController的大小?

    以下是加载SplashView的My SplashView Controller和TabbarController中的代码:

     -(void)loadView{
    // Init the view
    CGRect appFrame = [[UIScreen mainScreen] applicationFrame];
    UIView *view = [[UIView alloc] initWithFrame:appFrame];
    view.autoresizingMask = UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth;
    self.view = view;
    [view release];
    
    splashImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Splash.png"]];
    splashImageView.frame = CGRectMake(0,0,320,458);
    [self.view addSubview:splashImageView];
    
    viewController = [[FlashCardViewController alloc] initWithNibName:@"FlashCardViewController"  bundle:[NSBundle mainBundle]];
    //viewController.view.bounds = [[UIScreen mainScreen]bounds];
    viewController.title = @"Quiz";
    viewController.tabBarItem.image = [UIImage imageNamed:@"puzzle.png"];
    
    UIViewController *viewController2 = [[UIViewController alloc] initWithNibName:nil  bundle:nil];
    viewController2.title = @"Nada";
    viewController2.tabBarItem.image = [UIImage imageNamed:@"magnifying-glass.png"];
    //viewController.view.alpha = 0.0;
    //[self.view addSubview:viewController.view];
    
    tabBarController = [[UITabBarController alloc] init];
    tabBarController.viewControllers = [NSArray arrayWithObjects:viewController, viewController2, nil];
    [viewController2 release];
    tabBarController.view.alpha = 0.0;
    //tabBarController.tabBarItem.image = [UIImage imageNamed:@"State_California.png"];
    //tabBarController.tabBarItem.title = @"State_California.png";
    tabBarController.view.bounds = [[self view] bounds];
    //tabBarController.view.frame = [[UIScreen mainScreen] applicationFrame];
    [self.view addSubview:tabBarController.view];
    
    timer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(fadeScreen) userInfo:nil repeats:NO]; 
    }
    -(void) fadeScreen
    {
    [UIView beginAnimations:nil context:nil]; // begin animation block
    [UIView setAnimationDuration:0.75]; // sets animation duration
    [UIView setAnimationDelegate:self]; // sets the delegate for this block
    [UIView setAnimationDidStopSelector:@selector(finishedFading)]; // Calls finishFading
    self.view.alpha = 0.0; //  // Fades the alpha to 0 over animation
    [UIView commitAnimations]; // Commits this block, done
    }
    
    -(void) finishedFading
    {
    [UIView beginAnimations:nil context:nil]; // Begin animation block
    [UIView setAnimationDuration:0.75]; // set duration
    self.view.alpha = 1.0; // fades the view to 1.0 alpha over .75 seconds
    //viewController.view.alpha = 1.0;
    tabBarController.view.alpha = 1.0;
    [UIView commitAnimations];
    [splashImageView removeFromSuperview];
    }
    
    2 回复  |  直到 14 年前
        1
  •  12
  •   sth    15 年前

    我刚刚完成了几乎相同的工作,遇到了同样的问题,但最终我还是成功了。

    1. 在xcode中创建一个名为 Test1ViewController 并添加以下内容:

      @interface Test1ViewController : UIViewController {
          IBOutlet UITabBarController *tbc;
      }
      
      @property (nonatomic,retain) IBOutlet UITabBarController *tbc;
      @end
      
    2. 创建名为 Test1View

    3. 添加一个 TabBarViewController 到西伯

    4. 将XIB中文件的所有者设置为 测试1视图控制器 .

    5. 连接到 tbc 文件所有者中的IBoutlet指向XIB中的选项卡栏控制器。

    6. 连接到 view 文件的所有者中的IBoutlet指向XIB中的视图。

    7. 在splashviewcontroller.h中添加属性

      Test1ViewController *tabBarViewController;
      
    8. 合成 tabBarViewController 在你 SplashViewController.m .

    9. 取代你 TabBarController 在您的 loadView 方法在 SplashViewController 包括以下内容:

      tabBarViewController = [[Test1ViewController alloc] initWithNibName:
              @"Test1View" bundle:[NSBundle mainBundle]];
      tabBarViewController.view.alpha = 0.0;
      [self.view addSubview:[tabBarViewController view]];
      
    10. 这是我丢失的那块。在 Test1ViewController.m ,您需要将以下行添加到 viewDidLoad 方法:

      self.view = tbc.view;
      
    11. 最后,我也不得不改变 finishedFading 方法在 SplashView控制器.m 将alpha设置为1.0 选项卡视图控制器 查看。

      -(void) finishedFading
      {
          [UIView beginAnimations:nil context:nil];
          [UIView setAnimationDuration:0.75];
          self.view.alpha = 1.0;
          tabBarViewController.view.alpha = 1.0;
          [UIView commitAnimations];
          [splashImageView removeFromSuperview];
      }
      

    我希望这有帮助。

        2
  •  5
  •   Bryan    15 年前

    我终于找到了一些有用的东西。而不是:

    tabBarController.view.frame = [[UIScreen mainScreen] applicationFrame];
    

    tabBarController.view.bounds = [[self view] bounds];
    

    因为我找不到这个大小的自动或命名设置,所以我必须创建自己的矩形,即屏幕大小减去状态栏。

     tabBarController.view.frame = CGRectMake(0,0,320,460);