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



有没有办法检测UITabBarController的标签栏会出现或消失?我想与显示/隐藏选项卡栏的动画同时制作动画。

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

解决方案是在视图控制器中使用该方法 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];
    }

其中 self.constraintScrollViewCenterY 是与我想根据选项卡栏移动移动的视图的垂直对齐相关的约束

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

最新更新