如何使用tvOS上的SwiftUI在多个水平列表之间导航
我在一个全局垂直列表中有多个可滚动的水平列表,我很难管理焦点的变化 我有两个主要问题:如何使用tvOS上的SwiftUI在多个水平列表之间导航,swiftui,tvos,Swiftui,Tvos,我在一个全局垂直列表中有多个可滚动的水平列表,我很难管理焦点的变化 我有两个主要问题: 当一个视图下面没有其他视图时,底部手势不更新焦点。我想把焦点移到下面的视图。在我的GIF示例中,从第1节的第四视图到第2节的第二视图 当一个视图没有正下方的另一个视图时,底部手势将焦点移动到垂直下方的视图。我希望焦点移到最近的底部视图。在我的示例中,从第1节第三视图到第2节第二视图,而不是第3节第三视图 在我的tvOS应用程序中,我有很多关于这个问题的例子,我通过使用@Environment(\.r
- 当一个视图下面没有其他视图时,底部手势不更新焦点。我想把焦点移到下面的视图。在我的GIF示例中,从第1节的第四视图到第2节的第二视图
- 当一个视图没有正下方的另一个视图时,底部手势将焦点移动到垂直下方的视图。我希望焦点移到最近的底部视图。在我的示例中,从第1节第三视图到第2节第二视图,而不是第3节第三视图
@Environment(\.resetFocus)var resetFocus
和prefersDefaultFocus
viewModifier的组合修复了这个问题,但我正在努力解决这个用例
我还看到了另一个类似的用例,但还没有答案
struct ContentView: View {
var body: some View {
VStack(alignment: .leading) {
Text("Section 1")
ScrollView(.horizontal) {
HStack() {
ForEach(0 ..< 10) { item in
Button(action: {
}) {
FocusableRectangle()
}.buttonStyle(CardButtonStyle())
}
}.padding(40)
}
Text("Section 2")
ScrollView(.horizontal) {
HStack() {
ForEach(0 ..< 2) { item in
Button(action: {
}) {
FocusableRectangle()
}.buttonStyle(CardButtonStyle())
}
}.padding(40)
}
Text("Section 3")
ScrollView(.horizontal) {
HStack() {
ForEach(0 ..< 3) { item in
Button(action: {
}) {
FocusableRectangle()
}.buttonStyle(CardButtonStyle())
}
}.padding(40)
}
Spacer()
}
}
}
struct FocusableRectangle: View {
@Environment(\.isFocused) var isFocused: Bool
@State var color = Color.blue
var body: some View {
Rectangle()
.fill(color)
.frame(width: 300.0, height: 200.0)
.onChange(of: isFocused, perform: { value in
color = value ? Color.red : Color.blue
})
}
}
struct ContentView:View{
var body:一些观点{
VStack(对齐:。前导){
案文(“第1节”)
滚动视图(.horizontal){
HStack(){
ForEach(0..<10){
按钮(操作:{
}) {
FocusableRectangle()
}.buttonStyle(CardButtonStyle())
}
}.填充(40)
}
案文(“第2节”)
滚动视图(.horizontal){
HStack(){
ForEach(0..<2){中的项目
按钮(操作:{
}) {
FocusableRectangle()
}.buttonStyle(CardButtonStyle())
}
}.填充(40)
}
案文(“第3节”)
滚动视图(.horizontal){
HStack(){
ForEach(0..<3){中的项目
按钮(操作:{
}) {
FocusableRectangle()
}.buttonStyle(CardButtonStyle())
}
}.填充(40)
}
垫片()
}
}
}
结构FocusableRectangle:视图{
@环境(\.isFocused)变量isFocused:Bool
@状态变量color=color.blue
var body:一些观点{
矩形()
.填充(颜色)
.框架(宽度:300.0,高度:200.0)
.onChange(of:isFocused,执行:{value in
颜色=值?颜色。红色:颜色。蓝色
})
}
}