UINavigationController в UITabBarController странная поп-анимация

Когда я создаю четыре навигационных контроллера и добавляю их в UITabBar следующим образом:

// Create the root view controllers for the tab bar
firstViewController = [[FirstViewController alloc] init];
secondViewController = [[SecondViewController alloc] init];
thirdViewController = [[ThirdViewController alloc] init];
fourthViewController = [[FourthViewController alloc] init];

// Configure the tab bar
UITabBarController *tabBarController = [[[UITabBarController alloc] init] autorelease];
tabBarController.viewControllers = @[
[[[UINavigationController alloc] initWithRootViewController:firstViewController] autorelease],
[[[UINavigationController alloc] initWithRootViewController:secondViewController] autorelease],
[[[UINavigationController alloc] initWithRootViewController:thirdViewController] autorelease],
[[[UINavigationController alloc] initWithRootViewController:fourthViewController] autorelease]
];
tabBarController.selectedIndex = 1;

self.window.rootViewController = tabBarController;

У меня возникла проблема, когда какой-либо UINavigationController впервые отображается при запуске (в этом случае индекс 1) имеет странную анимацию «поп». Заголовок и таковые в навигационной панели ожидают должным образом, но содержимое навигационного контроллера изменяется без анимации.

Выбор другой вкладки, а затем возврат к исходной вкладке исправляет проблему.

Также, если я установил self.window.rootViewController в [[[UINavigationController alloc] initWithRootViewController: secondViewController] autorelease] , чтобы оставить панель вкладок из уравнения, навигация контроллер работает нормально.

Есть предположения?

2
nl ja de

3 ответы

//Create the root view controllers for the tab bar
firstViewController = [[FirstViewController alloc] init];
secondViewController = [[SecondViewController alloc] init];
thirdViewController = [[ThirdViewController alloc] init];
fourthViewController = [[FourthViewController alloc] init];

   UINavigationController *myNavigationController;
    UITabBarController *myTabBarController = [[UITabBarController alloc] init];

    NSMutableArray *myTabs = [[NSMutableArray alloc] init];

    myNavigationController = [[UINavigationController alloc] initWithRootViewController:firstViewController];
    [myTabs addObject:myNavigationController];
//Release
[myNavigationController release];
//Second view
    myNavigationController = [[UINavigationController alloc] initWithRootViewController:secondViewController];
    [myTabs addObject:myNavigationController];
[myNavigationController release];
//And so on with the third and fourth view controller
//...

[tabBarController setViewControllers:myTabs];
//Add the tab bar controller view to the main view
[self.window addSubview:tabBarController.view];
0
добавлено

У меня была та же проблема, и единственным решением, которое я нашел, является этот маленький взлом:

Поместите это в свой метод «(void) viewWillAppear» на первом контроллере представления UITabBarController.

     UITabBarController * controller = self.tabBarController;
     //Create this BOOL variable on your class and set it to YES on viewDidLoad
     if(firstTimeViewLoaded) {    
       //Simulate a click on other tab item then switch back instantly.
        [controller setSelectedViewController:controller.viewControllers[1]];
        [controller setSelectedViewController:controller.viewControllers[0]];
     }
     firstTimeViewLoaded = NO;
0
добавлено
Mobile Dev Jobs — вакансии и аналитика
Mobile Dev Jobs — вакансии и аналитика
6 187 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin и т.д. ВАЖНО: Правила публикации и правила канала: Ссылка – https://telegra.ph/Pravila-oformleniya-vakansij-i-rezyume-11-09-2

iOS Developers — русскоговорящее сообщество
iOS Developers — русскоговорящее сообщество
2 400 участник(ов)

Общаемся на темы, посвященным iOS-разработке, Swift, Objective-C, SDK, Rx, Cocoa и т.д.