UITabBar оставляет белый прямоугольник при скрытии

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

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

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

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

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

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


person Tobster    schedule 11.03.2010    source источник
comment
Пять лет спустя, а все еще нет достойного решения, которое не требовало бы жесткого кодирования прямоугольника? Вы когда-нибудь догадывались об этом? По-прежнему проблема с iOS 9, по-видимому ...   -  person elsurudo    schedule 03.08.2016
comment
Кстати, это лучший ответ: stackoverflow.com/a/4242817/363789   -  person elsurudo    schedule 03.08.2016


Ответы (17)


У меня была эта проблема, и я решил ее, изменив фрейм subview панели вкладок для моего представления содержимого (на панели вкладок есть 2 subviews - представление содержимого (# 0) и представление панели (# 1)):

[[self.tabBarController.view.subviews objectAtIndex:0] setFrame:FULLSCREEN_FRAME];
person reqzix    schedule 14.06.2011
comment
Спасибо ... я боролся с прошлыми 2 часами - person Tariq; 03.10.2011
comment
что такое FULL_SCREEN_FRAME? - person Dejell; 24.01.2013
comment
@Odelya FULL_SCREEN_FRAME - ваш желаемый кадр / прямоугольник. - person yunas; 07.03.2013

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

просто измените размер окна tabbarcontroller, когда вы скрываете панель вкладок:

tabBarController.view.frame = CGRectMake(0, 0, 320, 480);
person Thomas Joulin    schedule 26.11.2010

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

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

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

[self setHidesBottomBarWhenPushed:YES];

когда вы нажимаете на другое представление, где вам не нужна панель вкладок, просто напишите ее

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

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

person Ajay Sharma    schedule 22.11.2010
comment
Спасибо. Это правильный ответ. Все остальные - взломы. - person elsurudo; 03.08.2016

Это работает для меня:

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

У меня был этот код в viewControllers вкладки.

person Matt Chuang    schedule 17.02.2012
comment
или установите 490 вместо 480, если вы не отображаете строку состояния - person Dejell; 24.01.2013

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

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

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

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

. введите здесь описание изображения

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

введите описание изображения здесь

person Ajay Kumar    schedule 04.04.2017

Для тех, кто до сих пор с этим борется. Я обнаружил, что проблема заключается в ограничениях. Панель вкладок скрыта, но она уже изменила мое ограничение из раскадровки.

SWIFT 3+

self.tabBarController?.tabBar.isHidden = true

let cons = NSLayoutConstraint(item: textview, attribute: NSLayoutAttribute.bottom,
         relatedBy: NSLayoutRelation.equal, toItem: self.view, 
         attribute: NSLayoutAttribute.bottom, multiplier: 1.0, constant: 0)

view.addConstraints([cons])

В моем случае «textview» был тем элементом, который должен был заполнить пустое пространство из скрытой панели TabBar.

person tataelm    schedule 01.05.2020
comment
Это единственное, что работает - person Mars; 05.04.2021

Вы уверены, что он скрыт, а не просто А) не перерисован или Б) фрейм вашего GLView не занимает это место?

person Steven Canfield    schedule 11.03.2010
comment
Я бы сказал, что это более или менее похоже не занимает пространство, а не закрывается им, однако graph.superview.frame = CGRect (0,0,480,320) не работает, как и self.view, self.superview, практически любая другая комбинация. - person Tobster; 11.03.2010

некоторые из супервизоров currentViewController.view контроллера представления панели вкладок имеют для clipToBounds значение YES (имя класса - UITransitionView, если не ошибаюсь). Чтобы получить к нему доступ, используйте

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

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

person Denis    schedule 30.09.2010

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

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

[viewController presentModalViewController:graph animated:NO]

person kevboh    schedule 07.10.2010

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

person Pankaj Kainthla    schedule 21.10.2010

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

person Ryan Garcia    schedule 23.10.2010

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

person Naveen Shan    schedule 26.10.2010

Включается после того, как вы откроете табабр и перейдете к определенному виду. На панели вкладок uitababr было пустое пространство. Это решило мою проблему

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

}
person DreamWatcher    schedule 08.05.2014

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

- (BOOL)hidesBottomBarWhenPushed
{
    return YES;
}
person fengd    schedule 30.06.2014

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

person Nejc    schedule 11.03.2016

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

person Owen Hartnett    schedule 15.10.2010
comment
Это должен быть комментарий. Это не ответ на вопрос. - person Gustavo Barbosa; 18.02.2015

Вы пытались скрыть UITabBar с помощью

tab_bar.hidden = YES
person Tuomas Pelkonen    schedule 11.03.2010
comment
Это то, что я делаю, чтобы скрыть панель вкладок, которая успешно исчезает; но оставляет белый прямоугольник на месте. - person Tobster; 11.03.2010