TvOS UITabBarController检测显示/隐藏的标签栏

rai*_*212 2 objective-c uitabbarcontroller uitabbar apple-tv tvos

反正有没有检测到UITabBarController的tabbar会出现还是消失?我想与显示/隐藏标签栏的动画同时制作动画.

我没有找到任何方法来检测此事件.标签栏的"隐藏"属性不是一个选项,因为它会在动画结束后更改其值

rai*_*212 5

解决方案是使用视图控制器中的方法didUpdateFocusInContext:withAnimationCoordinator:使用此代码:

static NSString *kUITabBarButtonClassName = @"UITabBarButton";

NSString *prevFocusViewClassName = NSStringFromClass([context.previouslyFocusedView class]);
    NSString *nextFocusedView = NSStringFromClass([context.nextFocusedView class]);

    // The tabbar is going to disappear
    if ([prevFocusViewClassName isEqualToString:kUITabBarButtonClassName] &&
        ![nextFocusedView isEqualToString:kUITabBarButtonClassName]) {
        [self.view layoutIfNeeded];
        self.constraintScrollViewCenterY.constant -= self.tabBarController.tabBar.frame.size.height;

        [coordinator addCoordinatedAnimations:^{
            [self.view layoutIfNeeded];
        } completion:nil];
    // The tabbar is going to appear
    } else if (![prevFocusViewClassName isEqualToString:kUITabBarButtonClassName] &&
               [nextFocusedView isEqualToString:kUITabBarButtonClassName]) {
        [self.view layoutIfNeeded];
        self.constraintScrollViewCenterY.constant += self.tabBarController.tabBar.frame.size.height;

        [coordinator addCoordinatedAnimations:^{
            [self.view layoutIfNeeded];
        } completion:nil];
    }
Run Code Online (Sandbox Code Playgroud)

self.constraintScrollViewCenterY是一个约束,与我想根据tabbar运动移动的视图的垂直对齐有关

注意:使用类名(kUITabBarButtonClassName)而不是[... class]方法是由于UITabBarButton是一个私有类