Проблемы пользовательского UITabBarController с контроллерами просмотра и представлениями
-
07-07-2019 - |
Вопрос
Я пишу пользовательский UITabBarController, чтобы я мог полностью контролировать внешний вид панели вкладок.У меня все это работает, поэтому у меня есть массив контроллеров просмотра, которые он обрабатывает.
Контроллер имеет основной вид, который заполняет экран, а внутри него есть UIView внизу для панели вкладок.В этом представлении панели вкладок есть кнопка для каждого контроллера представления.Когда нажимаются кнопки, я добавляю вид контроллера представления к основному виду и устанавливаю его рамку так, чтобы она не закрывала вид панели вкладок:
controller.view.frame = CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height - kTabBarHeight);
Все это работает нормально, и я могу просто отлично переключаться между контроллерами просмотра.Однако, когда я представляю контроллер модального представления, а затем отклоняю его, представление текущего контроллера представления становится полноэкранным и закрывает мою панель вкладок!Я пробовал настроить авторазмерные маски так, чтобы они не изменяли размер, но это продолжает происходить.
Я также попытался добавить представление view controllers в нижней части (под панелью вкладок), используя:
[self.view insertSubview:controller.view atIndex:0];
Но когда я это делаю, панель вкладок видна даже над любыми модальными представлениями!Что странно.Я думаю, что есть что-то, чего я не понимаю, поэтому я был бы благодарен, если кто-нибудь сможет объяснить, чего мне не хватает!
Спасибо,
Майк
Решение 3
Мне удалось найти лучший способ управлять внешним видом панели вкладок, просто вставив вложенные представления в верхнюю часть панели вкладок контроллеры вкладок.Это сработало на славу!
Другие советы
Попробуйте установить
controller.view.frame = CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height - kTabBarHeight);
в методе viewWillAppear контроллера
Попробуй это.Я думаю, вам нужны контроллеры динамического просмотра внутри контроллера панели вкладок.
-(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];
}