SwiftUI: как отображать одно изображение за раз?

У меня есть массив изображений, которые я просматриваю и отображаю в scrollView. Это то, чего я хочу достичь:

  1. Я хотел бы, чтобы было только одно видимое изображение за раз. Нравится TikTok и инстаграм.
  2. Я хотел бы, чтобы изображение занимало как можно большую часть экрана, сохраняя при этом соотношение сторон.
  3. Центральное изображение
  4. я не против использовать.edgesIgnoringSafeArea([.top, .leading, .trailing])

Это код, который у меня есть до сих пор. Как видите, одновременно видны два изображения. И даже когда в массиве всего одно изображение, оно не центрируется, а цепляется за верхнюю часть экрана.

Любые идеи о том, как решить эту проблему?

       ScrollView(.vertical) {
            ForEach(allRetrievedMedia, id: \.self) { item in
                switch(item) {
                case .image(let img):

                        Image(uiImage: img)
                            .resizable()
                            .aspectRatio(contentMode: .fit)
                            .frame(alignment: .center)
   
                }
            }
        }

1 ответ

Вставьте изображение в контейнер и добавьте.frame(width: screenSize.width, height: screenSize.height, alignment: .center)к этому контейнеру. Затем добавьте.scaledToFill()метод к самому изображению. Это должно помочь, вот фрагмент, чтобы помочь...

      struct ContentView: View {
    let screenSize: CGRect = UIScreen.main.bounds

    var body: some View {
        ScrollView(.vertical) {
            ForEach(allRetrievedMedia, id: \.self) { item in switch(item) {
                case .image(let img):
                VStack {
                    Image(uiImage: img)
                        .resizable()
                        .scaledToFill()
                }.frame(width: screenSize.width, height: screenSize.height, alignment: .center)
            }
        }
    }
}

Сам не пробовал, но должно работать как шарм. Надеюсь, поможет

Другие вопросы по тегам