#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)
}