Добавление TabBarController в качестве подпредставления представления - PullRequest
4 голосов
/ 25 августа 2009

Я загружаю заставку при запуске моего приложения. Затем я хочу загрузить TabBarController и его ViewControllers. Однако мое окно TabBarController не масштабируется до размера экрана.

Вероятно, 3/4 TabBar внизу обрезается, и в верхней части экрана под строкой состояния находится тонкий пробел размером приблизительно 20 пикселей. Как правильно изменить размер TabBarController?

Вот код в моем SplashViewController, загружающем заставку, и 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 ]

12 голосов
/ 02 октября 2009

Я только что выполнил почти то же самое и столкнулся с теми же проблемами, но в конце концов у меня все заработало.

  1. Создайте класс View Controller в Xcode с именем Test1ViewController и добавьте следующее:

    @interface Test1ViewController : UIViewController {
        IBOutlet UITabBarController *tbc;
    }
    
    @property (nonatomic,retain) IBOutlet UITabBarController *tbc;
    @end
    
  2. Создание представления XIB с именем Test1View

  3. Добавить TabBarViewController к XIB

  4. Установите владельца файла в XIB равным Test1ViewController.

  5. Подключите IBOutlet tbc в владельце файла к контроллеру панели вкладок в XIB.

  6. Подключите IBOutlet view в владельце файла к представлению в 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 в SplashViewController.m, чтобы установить альфа на 1,0 в представлении tabBarViewController.

    -(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];
    }
    

Надеюсь, это поможет.

5 голосов
/ 26 августа 2009

Я наконец нашел что-то, что работает. Вместо:

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

или

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

Поскольку я не мог найти и автоматически, или именовать настройки для этого размера, мне пришлось создать собственный прямоугольник размером с экран за вычетом строки состояния.

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