我刚刚完成了一个 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}
}
}
}