UITabBar оставляет белый прямоугольник, когда скрыт - PullRequest
19 голосов
/ 11 марта 2010

Мне не удалось найти приемлемое для этого решение, которое можно применить к моему проекту.

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

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

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

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

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

Ответы [ 17 ]

34 голосов
/ 14 июня 2011

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

[[self.tabBarController.view.subviews objectAtIndex:0] setFrame:FULLSCREEN_FRAME];
5 голосов
/ 26 ноября 2010

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

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

tabBarController.view.frame = CGRectMake(0, 0, 320, 480);
3 голосов
/ 18 февраля 2012

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

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

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

3 голосов
/ 22 ноября 2010

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

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

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

[self setHidesBottomBarWhenPushed:YES];

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

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

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

1 голос
/ 04 апреля 2017

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

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

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

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

. enter image description here

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

enter image description here

0 голосов
/ 11 марта 2010

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

tab_bar.hidden = YES
0 голосов
/ 06 февраля 2016
- (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 голосов
/ 11 марта 2016

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

0 голосов
/ 08 мая 2014

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

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

}
0 голосов
/ 30 июня 2014

в представлении нажата

- (BOOL)hidesBottomBarWhenPushed
{
    return YES;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...