我在 watchOS 上的 SwiftUI 中有一个使用垂直 TabView 的棘手用例。 我在选项卡视图中显示地图,并使用按钮切换与地图的交互,使用数字皇冠进行缩放/平移。如果我没有与地图交互,我可以使用 Digital Crown 从一个选项卡移动到另一个选项卡。如果我将交互设置为使用数字皇冠的地图,然后将其删除,我将无法再使用数字皇冠来更改活动 TabView。我只能通过在屏幕上滑动手势来做到这一点。我尝试了不同的方法来将焦点强制返回 TabView 控制器,但没有成功。您有什么提示或建议吗?
这是示例代码:
import SwiftUI
import MapKit
struct ContentView: View {
@State private var isZooming = false
var body: some View {
TabView {
// Tab 1
VStack {
Text("First tab")
}
// Tab 2
VStack {
Map(interactionModes: isZooming ? .zoom : [])
Button {
isZooming.toggle()
} label: {
Text(isZooming ? "Cancel" : "Zoom")
}
}
}
.tabViewStyle(.verticalPage)
}
}
苹果已经承认这是一个错误。 解决方法是通过在此示例案例中添加以下视图修饰符将地图设置为禁用: .disabled(isZooming)