无法利用SwiftUI网格图像显示DetailView

时间:2019-12-21 22:16:12

标签: ios swiftui

我正在尝试在SwiftUI中创建一个集合视图。我可以创建网格(包含 这种情况),但我还没有找到一种方法来点击图片并过渡到其他视图- 既不是模态视图也不是全视图。我将图像存储在CoreData中,并且正在使用 Paul Hudson提出的将图像分成几行的方法:

https://www.hackingwithswift.com/example-code/language/how-to-split-an-array-into-chunks

此代码确实允许转换,但是只需单击一下即可在HStack中的每个图像之间循环 即使每张照片都有自己的NavigationLink包装器。

我还尝试了一个版本,其中我通过按钮制作了网格并将图像放入 按钮。更糟的是-详细内容不正确,Xcode抱怨 可能是这样的:“警告:尝试在已经显示(空)的<< / em >>上显示<< em >>。” 我还尝试将.onTapGesture {}添加到每个图像。与按钮类似的故障。

struct ChunkedContentView: View {

    @Environment(\.managedObjectContext) var managedObjectContext
    @FetchRequest(fetchRequest: DermPhoto.getAllDermPhotos()) var dermPhotos: FetchedResults<DermPhoto>

    //@State private var columnCount = 3//hard coded to 3 at the moment
    @State private var showDetailView = false

    var body: some View {

        let chunkThis = DermPhoto.chunkTheDermPhotos()

        return GeometryReader { geo in
            NavigationView {
                List {
                    ForEach(0 ..< chunkThis.count) { index in
                        HStack {
                            ForEach(chunkThis[index]) { p in
                                NavigationLink(destination: DetailView(passedDerm: p)) {

                                Image(uiImage: UIImage(data: p.myImage!)!)
                                    .resizable()
                                    .aspectRatio(contentMode: .fill)
                                    .frame(width: ((geo.size.width / 3) - 15), height: ((geo.size.width / 3) - 15))
                                    .border(Color.black)
                                    .clipped()
                                    //comment out NavigationLink and this does not work either
                                    //.onTapGesture {
                                    //self.showDetailView.toggle()
                                    //}
                                    //.sheet(isPresented: self.$showDetailView) {
                                    //DetailView(passedDerm: p)
                                    //}
                                    //either above or nav link
                                }//nav link
                            }
                        }
                    }
                }
                .navigationBarTitle("Time Series")
            }//nav
        }//geo
    }
}

第二个问题是,有没有一种方法可以禁止显示 NavigationLink?

任何指导将不胜感激。 Xcode 11.3(11C29)

1 个答案:

答案 0 :(得分:0)

@Asperi应该得到荣誉-使用ScrollView而不是List。这也删除了披露指标。如果您使用图片,则需要向{strong> NavigationLink 中添加.buttonStyle(PlainButtonStyle())。如果使用系统图标,则可能不需要该步骤。