在SwiftUI中,scrollview内部UI View的阴影是否会被scrollview的大小截断?

时间:2019-07-04 06:13:30

标签: scrollview swiftui

更新Xcode11 beta3之后,我发现滚动视图内部视图的阴影将在边界处被切除,但是在Xcode11 beta2中可以。我只是使用底部填充来修复它,但是我认为这不是一个好的解决方案。还有其他解决方案可以解决此问题吗?

ScrollView(.horizontal, showsIndicators: false) {
                HStack(spacing: 30) {
                    ForEach(courses) { item in
                        PresentationLink(destination: ContentView()) {
                            CourseView(
                                title: item.title,
                                image: item.image,
                                color: item.color,
                                shadowColor: item.shadowColor
                            )
                        }
                    }
                }
                .padding(.leading, 40)
                .padding(.bottom, 60)

CourseView()具有阴影修饰符,定义的主体类似于:

var body: some View {
        return VStack(alignment: .leading) {
            Text(title)
                .font(.title)
                .fontWeight(.bold)
                .color(.white)
                .padding(30)
                .lineLimit(4)
                .padding(.trailing, 50)
            Spacer()
            Image(image)
                .resizable()
                .renderingMode(.original)
                .aspectRatio(contentMode: .fit)
                .frame(width: 246, height: 150)
                .padding(.bottom, 30)
            }
            .background(color)
            .cornerRadius(30)
            .frame(width: 246, height: 360)
            .shadow(color: shadowColor, radius: 20, x:0, y: 20)
    }

我希望CourseView()的阴影可以显示为OK,而不是被ScrollView的边界切断。

2 个答案:

答案 0 :(得分:0)

尝试在水平堆栈前后使用Spacer()。这样,水平堆栈(HStack)将占据滚动视图的整个高度。希望对您有帮助

答案 1 :(得分:0)

对于您的问题,我有一种解决方法。解决方案是在下一个视图中使用偏移量,并将其重叠在ScrollView的顶部。在您的情况下,看起来像这样:

ScrollView(.horizontal, showsIndicators: false) {
                HStack(spacing: 30) {
                    ForEach(courses) { item in
                        PresentationLink(destination: ContentView()) {
                            CourseView(
                                title: item.title,
                                image: item.image,
                                color: item.color,
                                shadowColor: item.shadowColor
                            )
                        }
                    }
                }
                .padding(.leading, 40)
                .padding(.bottom, 60)
}
SomeView().offset(x:0, y: -60) // 60 is your bottom padding so we offset by negative 60 to counter it.