Ios 切换收藏夹时,SwiftUI Landmarks应用程序教程屏幕将返回
我正在关注这一点,并下载了 我构建并运行了完整的项目,没有任何修改。在应用程序中,如果我: 在列表视图中切换“仅显示收藏夹” 点击Turtle Rock或Chilkoot Trail详细视图 在详细视图中,我将收藏夹按钮切换为黄色星形图标 屏幕将自动跳回列表视图 但是,如果我点击列表视图中最后一个项目圣玛丽湖的详细视图,我可以打开和关闭黄色星形按钮,并且仍然保持在相同的详细视图中Ios 切换收藏夹时,SwiftUI Landmarks应用程序教程屏幕将返回,ios,swift,swiftui,Ios,Swift,Swiftui,我正在关注这一点,并下载了 我构建并运行了完整的项目,没有任何修改。在应用程序中,如果我: 在列表视图中切换“仅显示收藏夹” 点击Turtle Rock或Chilkoot Trail详细视图 在详细视图中,我将收藏夹按钮切换为黄色星形图标 屏幕将自动跳回列表视图 但是,如果我点击列表视图中最后一个项目圣玛丽湖的详细视图,我可以打开和关闭黄色星形按钮,并且仍然保持在相同的详细视图中 有人能解释这种行为吗?我需要做什么才能保持在“详细信息”视图中而不被强制导航回列表视图?之所以会出现这种情况,是因为
有人能解释这种行为吗?我需要做什么才能保持在“详细信息”视图中而不被强制导航回列表视图?之所以会出现这种情况,是因为在主列表中,您切换为仅显示收藏夹。然后在细节中更改收藏夹,使其不再是收藏夹地标,并且因为在swiftui中真理的来源已更改收藏夹,所以此项目已从主列表中删除,因此无法在细节中显示,因为它不再是主列表的成员,因此,“详细信息”视图只是向后导航并仅显示收藏夹项目。这是因为在主列表中,您切换为仅显示收藏夹。然后在细节中更改收藏夹,使其不再是收藏夹地标,并且因为在swiftui中真理的来源已更改收藏夹,所以此项目已从主列表中删除,因此无法在细节中显示,因为它不再是主列表的成员,因此,详细视图只是向后导航并仅显示最喜爱的项目。好吧,实际上这是SwiftUI缺陷,视图超出视图层次结构不能刷新,即主体调用-应该在下次出现后立即更新。我提交了反馈FB7659875,并建议对每个受影响的人都这样做-这是在重复更好的情况下 同时,以下是可能的临时解决方法,但即使在苹果解决问题后,它仍将继续工作,因此是安全的。其思想是使用局部视图状态模型作为视图和已发布属性之间的中介,并使其仅在视图可见时更新 仅提供所述项目中需要更换的校正视图 使用Xcode 11.4/iOS 13.4进行测试-没有意外的跳回
嗯,实际上这是SwiftUI缺陷,视图超出视图层次结构不能刷新,即调用body-它应该在下一次出现后立即更新。我提交了反馈FB7659875,并建议对每个受影响的人都这样做-这是在重复更好的情况下 同时,以下是可能的临时解决方法,但即使在苹果解决问题后,它仍将继续工作,因此是安全的。其思想是使用局部视图状态模型作为视图和已发布属性之间的中介,并使其仅在视图可见时更新 仅提供所述项目中需要更换的校正视图 使用Xcode 11.4/iOS 13.4进行测试-没有意外的跳回
我的应用程序中也有同样的问题,当切换最后一个可用元素时,它似乎不会跳回列表。也许是虫子?我相信预期的行为是它不会跳回列表,因为它不可见。Xcode 11.4 iOS 13.4Gosh。。。这是以前Xcode版本警告的修复效果-[TableView]仅警告一次:UITableView被告知布局其可见单元格和其他内容,而不在视图层次结构中。。。至少在那时,Xcode 11.2起了作用。是的,这是SwiftUI的一个bug。。。需要考虑解决方法。我的应用程序中也有同样的问题,在切换最后一个可用元素时,它似乎不会跳回列表。也许是虫子?我相信预期的行为是它不会跳回列表,因为它不可见。Xcode 11.4 iOS 13.4Gosh。。。这是以前Xcode版本警告的修复效果-[TableView]仅警告一次:UITableView被告知布局其可见单元格和其他内容,而不在视图层次结构中。。。至少在那时,Xcode 11.2起了作用。是的,这是SwiftUI的一个bug。。。需要考虑解决方法。您是否尝试过主列表视图中的最后一项?为什么它的行为不同于所有其他项目?好吧,你是对的-这不是我所期望的…所以看起来像是一个苹果错误。你试过主列表视图中的最后一个项目了吗?为什么它的行为不同于所有其他项目?好吧,你是对的-这不是我所期望的…所以看起来像一个苹果bugI也提交了反馈:FB7659963。这是一个很好的解决方案,谢谢!如果它对你有效,你是否会将它标记为已接受,以提高其他社区的可见性。我不能接受这个问题,因为我没有问它,但我设置了赏金。我还不能颁发奖金,因为还没到24小时哎哟是的。。。我错过了我
还提交了反馈:FB7659963。这是一个很好的解决方案,谢谢!如果它对你有效,你是否会将它标记为已接受,以提高其他社区的可见性。我不能接受这个问题,因为我没有问它,但我设置了赏金。我还不能颁发奖金,因为还没到24小时哎哟是的。。。我错过了
struct LandmarkList: View {
@EnvironmentObject private var userData: UserData
@State private var landmarks = [Landmark]() // local model
@State private var isVisible = false // own visibility state
var body: some View {
NavigationView {
List {
Toggle(isOn: $userData.showFavoritesOnly) {
Text("Show Favorites Only")
}
ForEach(landmarks) { landmark in
if !self.userData.showFavoritesOnly || landmark.isFavorite {
NavigationLink(
destination: LandmarkDetail(landmark: landmark)
.environmentObject(self.userData)
) {
LandmarkRow(landmark: landmark)
}
}
}
}
.onReceive(userData.$landmarks) { array in // observe external model
if self.isVisible {
self.landmarks = array // update local only if visible
}
}
.onAppear {
self.isVisible = true // track own state
self.landmarks = self.userData.landmarks
}
.onDisappear { self.isVisible = false } // track own state
.navigationBarTitle(Text("Landmarks"))
}
}
}