Недавно я перешел на использование UITabBarController в своем приложении, и меня не удивило, что я не могу заставить hidesBarsOnSwipe работать с ним. Я обычно просто говорю (в контроллере представления) hidesBarsOnSwipe = true, но теперь это не работает. Было бы здорово, если бы кто-нибудь помог мне сделать эту работу.

Благодарность!

4
Zoyt 3 Ноя 2014 в 02:39
Вы пробовали с hidesBarsOnSwipe = YES;? Если это не поможет, предоставьте нам код для исследования.
 – 
carlodurso
3 Ноя 2014 в 03:18
- Я в Свифте.
 – 
Zoyt
3 Ноя 2014 в 03:22
Попробуйте self.navigationController!.hidesBarsOnSwipe = true, hidesBarsOnSwipe включен только в NavigationController, позже он может быть добавлен в UITabBarController, у меня это сработало в случае, когда UITabBarController является исходным контроллером, и оба элемента встроены в NavigationController, добавив этот код в метод viewDidLoad обоих элементов.
 – 
gabbler
6 Ноя 2014 в 11:26
@Zout, вы можете найти точное решение здесь
 – 
malex
7 Сен 2015 в 23:34

4 ответа

Лучший ответ

Я решил проблему. Я встроил UITabBarController внутрь UINavigationController, который я поставил в качестве корневого контроллера представления для окна. После того, как я сделал рут только контроллером панели вкладок, он работал как шарм.

Благодарность!

1
Zoyt 8 Ноя 2014 в 09:47

Вы можете добавить действие в hideOnSwipe, как показано ниже.

[self.navigationController.barHideOnSwipeGestureRecognizer addTarget:self action:@selector(swipeGesture:)];

Добавьте любой код, который хотите, в метод swipeGesture. Скрыть / показать панель вкладок.

3
Pavan Kotesh 11 Июн 2015 в 13:12

Быстро3

  self.navigationController?.barHideOnSwipeGestureRecognizer.addTarget(self, action: "swipeGestuere")  

Объявить скрытую переменную, которая помогает вернуть панель вкладок

 func swipeGestuere() {
    if (hidden == true){         
    self.bottomTabBar.isHidden = true
        hidden = false
    }
    else{
        self.bottomTabBar.isHidden = false
        hidden = true
    }

}                             
0
Sateesh Pasala 20 Дек 2016 в 14:20

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

- (void)setTabBarHidden:(BOOL)hidden
{
    CGRect frame = self.originalViewFrame;
    if (hidden)
    {
        frame.size.height += self.tabBar.size.height;
    }
    self.view.frame = frame;
}

Затем вы можете добавить KVO в свой режим прокрутки:

[scrollView addObserver:self
             forKeyPath:@"contentOffset"
                options:NSKeyValueObservingOptionOld
                context:nil];

И скрыть / показать панель вкладок при прокрутке:

- (void)observeValueForKeyPath:(NSString *)keyPath
                      ofObject:(id)object
                        change:(NSDictionary *)change
                       context:(void *)context
{
    CGPoint oldOffset = [(NSValue *)change[NSKeyValueChangeOldKey] CGPointValue];

    if (!_hidesBarsOnScroll || _scrollView.contentOffset.y == oldOffset.y)
        return;

    // Show on scroll up
    if (_barsHidden &&
        scrollView.contentOffset.y < oldOffset.y &&
        scrollView.contentOffset.y + scrollView.bounds.size.height < scrollView.contentSize.height) // Skip on bottom
    {
        [self.navigationController setNavigationBarHidden:NO
                                                 animated:YES]; // Also navigation bar!
        [self.tabBarController setTabBarHidden:NO
                                      animated:YES];
        _barsHidden = NO;
    }

    // Hide on scroll down
    if (!_barsHidden &&
        scrollView.contentOffset.y > 0 && // Skip on top
        scrollView.contentOffset.y > oldOffset.y)
    {
        [self.navigationController setNavigationBarHidden:YES
                                                 animated:YES];
        [self.tabBarController setTabBarHidden:YES
                                      animated:YES];
        _barsHidden = YES;
    }
}

Вы можете ознакомиться с этой реализацией .

-1
Rivera 10 Ноя 2014 в 05:27
Мне нужно, чтобы панель вкладок скрывалась, когда я прокручиваю прокрутку вверх в UIViewController.
 – 
Zoyt
8 Ноя 2014 в 05:32
Вам просто нужно вызвать setTabBarHidden: при прокрутке. Для этого также добавлен пример кода, но вы можете сделать это по-другому, если хотите.
 – 
Rivera
10 Ноя 2014 в 05:28