0

我面临一个持续数天的问题。我正在创建一个需要自定义导航链接(按钮)的 tvos 应用程序,当我将焦点移动到导航项时,它应该会缩放一点,并且我还需要更改父视图的背景。这很简单,但似乎 focusabe 覆盖了我的自定义按钮样式。测试表明,当导航按钮获得焦点时,背景图像发生了变化,但没有任何缩放效果。有什么建议吗?

NavigationLink(destination: Text("myview"))
{Text("Test")
}
.buttonStyle(myButtonStyle())
.Focusable(true){(focus) in 
//the code to change the background image


//myButtonStyle definition
struct MyButtonStyle: ButtonStyle { 
  func makeBody(configuration: Configuration) -> some View {
    return AppButton(configuration: configuration)
  }
  }
  
  struct AppButton: View {
    @Environment(\.isFocused) var focused: Bool
    let configuration: ButtonStyle.Configuration
      var body: some View {
      configuration.label
             .scaleEffect(focused ? 1.1 : 1.0)
            .focusable(true) 
          }
        }
    

当项目按我的预期获得焦点时,始终调用更改背景图像的行,但缩放效果消失了。如果我删除以下代码行,规模效应又回来了:

//      .Focusable(true){(focus) in 
        //the code to change the background image
//       }

看起来这行代码覆盖了我的导航按钮的自定义样式,有什么想法吗?感谢任何帮助!

4

1 回答 1

0

啊,我终于找到了棘手的问题,虽然关于这个的文档很少。在引入 Focusable 时,不应在代码中更改焦点引擎,这将导致导航链接点击消息未捕获,然后您的导航链接用于另一个视图将不起作用。使用 .onChange() 函数来处理任何焦点更改事件,而不是使用 Focusable。

于 2021-06-25T13:23:10.727 回答