tvOS 13中tab bar未聚焦时能否隐藏对应的tab bar focus效果?
tvOS 13 隐藏TabBar非聚焦状态焦点效果方案
tvOS 13支持在TabBar组件未处于聚焦状态时隐藏对应的焦点效果,可通过以下两种方式实现:
- 方案一:重写UITabBar的
focusGroupIdentifier属性
将自定义TabBar类的焦点组标识返回值设为nil,系统会自动在TabBar脱离焦点链时清除其保留的焦点高亮效果,参考代码如下:
后续在你的UITabBarController中使用这个CustomTabBar替换系统原生TabBar即可生效。class CustomTabBar: UITabBar { override var focusGroupIdentifier: String? { get { nil } set {} } } - 方案二:监听焦点状态变更手动控制样式
通过UIFocusEnvironment的焦点更新回调,判断当前焦点是否落在TabBar区域,非聚焦时手动修改样式隐藏焦点效果,参考代码如下:override func didUpdateFocus(in context: UIFocusUpdateContext, with coordinator: UIFocusAnimationCoordinator) { super.didUpdateFocus(in: context, with: coordinator) // 判断当前焦点是否在TabBar内部 let tabBarFocused = context.nextFocusedView?.isDescendant(of: self.tabBar) ?? false if !tabBarFocused { // 非聚焦状态下清除焦点效果,可根据业务需求调整逻辑 self.tabBar.tintAdjustmentMode = .dimmed // 若有自定义焦点动画,此处可调用重置动画的方法 } else { self.tabBar.tintAdjustmentMode = .automatic } }
注意:两种方案均不会影响TabBar的正常交互,用户将焦点切回TabBar区域时,系统会自动恢复正常的焦点高亮效果。
内容的提问来源于stack exchange,提问作者Manoj Singh
相关产品推荐
相关产品推荐

