1

我刚刚完成了一个 iOS/watchOS 应用程序。将手表升级到 WatchOS8 后,我发现了 WatchOS7 不存在的新故障。我有一个区域列表,每个区域都包含一些位置,并且列表的每个单元格中都有一个链接,用于导航到这些位置的列表。在 OS8 中,我发现第一次点击区域名称时,它会正确导航到位置列表,但之后就不行了。相反,它似乎存储了链接,以便当我切换到另一个屏幕(下面代码中的 TripView 或 ExcursionView)时,它会短暂导航到正确的位置列表,然后立即返回到区域列表(而不是 TripView 或 ExcursionView)。这是代码的相关部分。

struct ContentView: View {
    var body: some View {
        TabView {
            WatchCurrentView()
            WatchTripView(tripType:.trip)
            WatchTripView(tripType:.interval)
            WatchRegionView()
            WatchExcursionView()
        }
    }
}
struct WatchRegionView: View {
    @FetchRequest(fetchRequest:Region.fetch())
    var regions: FetchedResults<Region>
    var body: some View {
        VStack{
        Spacer()
            .frame(height:5)
        List{ForEach(regions, id:\.self){region in
            ZStack(alignment: Alignment(horizontal: .leading, vertical: .center)) {
                RegionCell(region:region)
                    .frame(height:14)
                NavigationLink(
                    destination: WatchLocationsInRegionView(region:region),
                    label: {
                        EmptyView()
                    }
                )
            }
        }
        .environment(\.defaultMinListRowHeight, 0.1)
        Spacer()
        }
        .navigationBarTitle("Regions")
        }
    }
}
struct RegionCell:View {
    @EnvironmentObject var prefs: Prefs
    var region:Region
    var body: some View {
        HStack{
            Spacer()
                .frame(width:15)
            Text(region.name)
            Spacer()
        }
        .frame(height:25)
        .background(Color(prefs.colorTheme.navBarFG))
        .foregroundColor(Color(prefs.colorTheme.navBarBG))
    }
}

struct WatchLocationsInRegionView:View {
    @State var region:Region
    var body: some View {
        List{ForEach(region.locations, id:\.self)
            {location in
            ZStack{
            WatchLocationView (aLocation: InternalLocation(location: location), tripType:.trip,locationType: .list)
            NavigationLink(
                destination: BigWatchLocationView(aLocation: InternalLocation(location: location)),
                label: {
                    EmptyView()
                })
            }
        }
        .font(.system(size: 14))
        .navigationBarTitle("\(region.name)")
        .onAppear(){prefs.watchDisplayMode = .coordinates}
        }
    }
}
4

0 回答 0