iOS - Как скрыть / показать панель вкладок UITabBarController с анимацией? - PullRequest
3 голосов
/ 04 апреля 2011

У меня вопрос по панели вкладок UITabBarController в iOS.

Я использую UITabBarController для отображения нескольких видов, но, поскольку я хочу, чтобы виды отображались с максимально большим экраном. Можно ли скрыть панель вкладок, чтобы она обычно не отображалась, пока пользователь не коснется экрана, тогда панель вкладок (с анимацией) появится внизу. Затем, через несколько секунд, если ничего не будет сделано, панель вкладок снова исчезнет, ​​так что представление снова станет полноэкранным?

Ответы [ 3 ]

5 голосов
/ 19 сентября 2012

Вот как вы это показываете

- (void)showTabBar:(UITabBarController *)tabbarcontroller
{
    tabbarcontroller.tabBar.hidden = NO;
    [UIView animateWithDuration:kAnimationInterval animations:^{
        for (UIView *view in tabbarcontroller.view.subviews) {
            if ([view isKindOfClass:[UITabBar class]]) {
                [view setFrame:CGRectMake(view.frame.origin.x, view.frame.origin.y-49.f, view.frame.size.width, view.frame.size.height)];
            }
            else {
                [view setFrame:CGRectMake(view.frame.origin.x, view.frame.origin.y, view.frame.size.width, view.frame.size.height-49.f)];
            }
        }
    } completion:^(BOOL finished) {
        //do smth after animation finishes
    }];
}

... и вот как ты это скрываешь

- (void)hideTabBar:(UITabBarController *)tabbarcontroller
{
    [UIView animateWithDuration:kAnimationInterval animations:^{
        for (UIView *view in tabbarcontroller.view.subviews) {
            if ([view isKindOfClass:[UITabBar class]]) {
                [view setFrame:CGRectMake(view.frame.origin.x, view.frame.origin.y+49.f, view.frame.size.width, view.frame.size.height)];
            }
            else {
                [view setFrame:CGRectMake(view.frame.origin.x, view.frame.origin.y, view.frame.size.width, view.frame.size.height+49.f)];
            }
        }
    } completion:^(BOOL finished) {
        //do smth after animation finishes
        tabbarcontroller.tabBar.hidden = YES;
    }];
}
2 голосов
/ 16 сентября 2014

При принятом ответе на iOS 7, когда вы скрываете панель вкладок и снова показываете ее, размер неправильный.Этот код дает лучший результат:

- (void) toggleTabBar: (UITabBar *)tabBar view: (UIView*) view {

    tabBar.hidden = NO;

    [UIView animateWithDuration:0.5 animations:^{
            if (hiddenTabBar) {
                tabBar.center = CGPointMake(tabBar.center.x, self.view.window.bounds.size.height-tabBar.bounds.size.height/2);
            }
            else {
                tabBar.center = CGPointMake(tabBar.center.x, self.view.window.bounds.size.height+tabBar.bounds.size.height);
            }

        } completion:^(BOOL finished) {
            hiddenTabBar = !hiddenTabBar;
            tabBar.hidden = hiddenTabBar;
        }];
}
1 голос
/ 05 апреля 2011

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

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

...