Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/101.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 切换收藏夹时,SwiftUI Landmarks应用程序教程屏幕将返回_Ios_Swift_Swiftui - Fatal编程技术网

Ios 切换收藏夹时,SwiftUI Landmarks应用程序教程屏幕将返回

Ios 切换收藏夹时,SwiftUI Landmarks应用程序教程屏幕将返回,ios,swift,swiftui,Ios,Swift,Swiftui,我正在关注这一点,并下载了 我构建并运行了完整的项目,没有任何修改。在应用程序中,如果我: 在列表视图中切换“仅显示收藏夹” 点击Turtle Rock或Chilkoot Trail详细视图 在详细视图中,我将收藏夹按钮切换为黄色星形图标 屏幕将自动跳回列表视图 但是,如果我点击列表视图中最后一个项目圣玛丽湖的详细视图,我可以打开和关闭黄色星形按钮,并且仍然保持在相同的详细视图中 有人能解释这种行为吗?我需要做什么才能保持在“详细信息”视图中而不被强制导航回列表视图?之所以会出现这种情况,是因为

我正在关注这一点,并下载了

我构建并运行了完整的项目,没有任何修改。在应用程序中,如果我:

在列表视图中切换“仅显示收藏夹” 点击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"))
        }
    }
}