ScrollView, отсекающий часть вида с белыми полосами (SwiftUI)

#swiftui

#swiftui

Вопрос:

Я реализую ScrollView в своем проекте SwiftUI, но он отсекает часть представления:

введите описание изображения здесь

Как это должно выглядеть:

введите описание изображения здесь

Код:

 struct ScrollingTest: View {
var body: some View {
    GeometryReader { geometry in
        ScrollView(.vertical, showsIndicators: false){
            VStack{
                ForEach(0..<2){ _ in
                    VStack {
                        Rectangle()
                            .foregroundColor(Color.white)
                            .frame(width: geometry.size.width - 50, height: 250)
                            .cornerRadius(25)
                            .shadow(radius: 5)
                    }.padding(.top, 15)
                }
            }.edgesIgnoringSafeArea(/*@START_MENU_TOKEN@*/.all/*@END_MENU_TOKEN@*/)
        }
        .offset(x: 20)
    }
}
  

Не имеет значения, какой размер я устанавливаю для прямоугольника, он просто всегда обрезается.
Что я могу сделать, чтобы исправить это? Спасибо

Ответ №1:

Он обрезается scrollview. Вот возможное решение. Протестировано с Xcode 12 / iOS 14.

ДЕМОНСТРАЦИЯ

 var body: some View {
    GeometryReader { geometry in
        ScrollView(.vertical, showsIndicators: false){
            VStack{
                ForEach(0..<2){ _ in
                    VStack {
                        Rectangle()
                            .foregroundColor(Color.white)
                            .frame(width: geometry.size.width - 50, height: 250)
                            .cornerRadius(25)
                            .shadow(radius: 5)
                    }.padding(.top, 15)
                }
            }.frame(width: geometry.size.width)
            .edgesIgnoringSafeArea(/*@START_MENU_TOKEN@*/.all/*@END_MENU_TOKEN@*/)
        }
    }
}
  

Ответ №2:

Это потому, что способ добавления тени. Если вы удалите тень (и измените цвет прямоугольника на что-то другое, кроме белого, чтобы он не был белым на белом невидимом), вы увидите, что полосы нет. Следующее выглядит немного больше похоже на то, что вы хотите. По сути, ваш прямоугольник находится поверх нового прямоугольника, так что тень больше не обрезается.

 GeometryReader { geometry in
        ScrollView(.vertical, showsIndicators: false){
            VStack{
                ForEach(0..<2){ _ in
                    ZStack {
                        Rectangle()
                            .frame(width: geometry.size.width - 30, height: 250)
                            .foregroundColor(Color.white)
                        VStack {
                            Rectangle()
                                .foregroundColor(Color.white)
                                .frame(width: geometry.size.width - 50, height: 250)
                                .cornerRadius(25)
                                .shadow(radius: 5)
                        }.padding(.top, 15)
                    }

                }
            }.edgesIgnoringSafeArea(/*@START_MENU_TOKEN@*/.all/*@END_MENU_TOKEN@*/)
        }
        .offset(x: 20)
    }