2010-03-11 4 views
19

Мне не удалось найти приемлемое для Google решение, которое может быть применено к моему проекту.UITabBar оставляет белый прямоугольник, когда скрыт

Мое приложение - это инструмент графического отображения, состоящий из трех вкладок; один для самого графика, а два других предназначены для функций поиска/поиска для вещей, которые могут быть добавлены в график. Все вкладки являются навигационными контроллерами.

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

Когда пользователь поворачивается в ландшафтный режим, график становится полным, а все остальное, включая панель вкладок, исчезает. Вот где я столкнулся с проблемой, так как GLView для моего графика всегда затенен белым прямоугольником, где была панель вкладок.

Я попытался изменить размер отображения навигационных контроллеров на весь экран, изменив размер представления контроллеров панели вкладок на весь экран, изменив размер рамки самой панели вкладок на CGRect (0,0,0 , 0), становясь эмоционально обезумевшими, ударяя кулаками по столу, крича оскорбительный язык в MacBook и т. Д .; все безрезультатно.

Как я могу заставить его работать?

+0

Пять лет спустя, и до сих пор нет достойного решения, которое не требует жесткого кодирования не прямоугольник? Вы когда-нибудь видели это? По-прежнему проблема с iOS 9, по-видимому ... – elsurudo

+0

Btw, это лучший ответ: http://stackoverflow.com/a/4242817/363789 – elsurudo

+0

@Tobster Вам следует подумать о принятии ответа, если любой из них верен. –

ответ

-4

Вы пробовали прятать UITabBar с

tab_bar.hidden = YES 
+0

Вот что я делаю, чтобы скрыть панель вкладок, которая успешно исчезает; но оставляет белый прямоугольник, где он был. – Tobster

0

Вы уверены, что он закрыт и не только) не перерисованы или B) кадр вашего GLView не занимает это пространство?

+0

Я бы сказал, что более или менее кажется, что он не занимает пространство, а не затеняется им, однако graph.superview.frame = CGRect (0,0,480,320) не работает, не делает то же самое с self.view, self.superview , практически любая другая комбинация. – Tobster

0

Некоторые из представлений currentViewController.view контроллера просмотра панели вкладок имеют значение параметра ClipToBounds для YES (это имя класса UITransitionView, если не ошибочно). Для того, чтобы получить к нему доступ с помощью

tabBarController.currentViewController.view.superview.superview.clipToBounds = NO; 

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

0

Это всего лишь обходной путь, но попробовали ли вы представить график, когда пользователь поворачивается в альбом? Это должно затенять панель вкладок.

Вы можете избежать перехода с

[viewController presentModalViewController:graph animated:NO]

-1

Я предполагаю, что вы уже проверили на стрелки автоматического изменения вашей точки зрения?

+0

Это должен быть комментарий. Это не отвечает на вопрос. –

+0

Вы отмечаете ответ от пяти лет назад? –

0

это потому, что пространство, в котором была панель вкладок, не было выделено другим представлениям, когда у вас установлена ​​скрытая панель вкладок, вы можете установить соответствующее представление, чтобы растянуть или заполнить весь экран, например, заполнить масштаб или заполнить что-то подобное или просмотреть больше, чем экран iphine, так что, когда вы меняете телефон на пейзаж, он может заполнить экран

0

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

0

Я думаю, что и нужно установить self.navigationController.view.frame до полного размера т.е. UIApplication экрана кадра перед и установить TabBar скрытые

3

кажется, есть проблема с скрытия нижней панели как Tab бар .. .., с которым я столкнулся и много сделал для этого. Я считаю это ошибкой в ​​этой панели вкладок.Тогда же .... мы можем использовать некоторые трюк .....

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

для ада кодирования вам нужно написать только

[self setHidesBottomBarWhenPushed:YES]; 

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

twitDetObj=[[TwitDetail alloc] initWithNibName:@"TwitDetail" bundle:nil]; 
[self.navigationController pushViewController:twitDetObj animated:YES]; 
self.hidesBottomBarWhenPushed=YES; 
[twitDetObj release]; 

Надеется, что это будет работать для вас .....

+0

Спасибо. Это правильный ответ. Все остальные - хаки. – elsurudo

34

Я имел эту проблему, и я разрешил его путем изменений подвида кадра TabBar для моего точки зрения содержания (есть 2 подвидов в панели вкладок - вид контента (# 0) и вид бара (# 1)):

[[self.tabBarController.view.subviews objectAtIndex:0] setFrame:FULLSCREEN_FRAME]; 
+1

Спасибо ... Я борется с последних 2 часов – Tariq

+0

что такое FULL_SCREEN_FRAME? – Dejell

+0

@Odelya FULL_SCREEN_FRAME - ваш желаемый фрейм/прямоугольник. – yunas

3

Это один работает me:

[[self.tabBarController.view.subviews objectAtIndex:0] setFrame:CGRectMake(0, 0, 320, 480)]; 

У меня был этот код в представлении вкладкиКонтроллеры.

+0

или установите вместо 490 вместо 480, если вы не отобразите строку состояния – Dejell

0

Включается после скрытия tababr и достижения определенного вида. Tabbar показывал пробел выше uitababr. Это решило мою проблему

-(void)viewWillAppear:(BOOL)animated 
{ 
    [[self.tabBarController.view.subviews objectAtIndex:0] setFrame:CGRectMake(0, 0, 320, 568)]; 

} 
0

в представлении толкнул

- (BOOL)hidesBottomBarWhenPushed 
{ 
    return YES; 
} 
0
- (void)hidesTabBar:(BOOL)hidden { 
    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDuration:0]; 

    for (UIView *view in self.tabBarController.view.subviews) { 
     if ([view isKindOfClass:[UITabBar class]]) { 
      if (hidden) { 
       [view setFrame:CGRectMake(view.frame.origin.x, [UIScreen mainScreen].bounds.size.height, view.frame.size.width , view.frame.size.height)]; 
      } else { 
       [view setFrame:CGRectMake(view.frame.origin.x, [UIScreen mainScreen].bounds.size.height - 49, view.frame.size.width, view.frame.size.height)]; 
      } 
     } else { 
      if([view isKindOfClass:NSClassFromString(@"UITransitionView")]) { 
       if (hidden) { 
        [view setFrame:CGRectMake(view.frame.origin.x, view.frame.origin.y, view.frame.size.width, [UIScreen mainScreen].bounds.size.height)]; 
       } else { 
        [view setFrame:CGRectMake(view.frame.origin.x, view.frame.origin.y, view.frame.size.width, [UIScreen mainScreen].bounds.size.height - 49)]; 
       } 
      } 
     } 
    } 

    [UIView commitAnimations]; 
} 
0

Мое решение: установить self.edgesForExtendedLayout = .None в viewDidLoad() ваш взгляд контроллера.

0

ПРИМЕЧАНИЕ. Это решение состоит в том, чтобы просто удалить пустое пространство после скрытия панели вкладок.

для скрытия панели вкладок лучшего решения есть - @Michael Campsall answer here

Самое простое решение это изменить ваше мнение (в моем случае его Tableview) нижние ограничения, вместо того чтобы нижние ограничения с BottomLayoutGuide дать ему с надписью. Скриншоты прилагаются для справки.

Ограничение, показанное на скриншотах ниже создает проблему, измените его в соответствии с скриншотом

. enter image description here

Фактические ограничения для удаления пробелов должны соответствовать этому (ниже) снимку экрана.

enter image description here

Смежные вопросы