Невозможно использовать изображения сетки SwiftUI для отображения детального вида - PullRequest
0 голосов
/ 22 декабря 2019

Я пытаюсь создать представление коллекции в SwiftUI. Я могу создать сетку (в данном случае изображений), но я не нашел способа щелкнуть изображение и перейти к другому виду - ни модальному, ни полному виду. Я храню изображения в CoreData и использую метод от Пола Хадсона, чтобы разбить изображения на строки:

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 голосов
/ 23 декабря 2019

@ Аспери заслуживает похвалы - используйте ScrollView вместо List. Это также удаляет индикатор раскрытия. Если вы используете изображения, вам нужно добавить .buttonStyle(PlainButtonStyle()) в NavigationLink . Если вы используете системные значки, вам может не понадобиться этот шаг.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...