clipsToBounds 的 SwiftUI 等效项是什么?

问题描述 投票:0回答:2

我在 SwiftUI 中有一个滚动视图,我不想在滚动时剪切超出范围的内容。在 UIKit 中,我们可以通过将滚动视图的

clipsToBounds
设置为
false
来实现这一点。你会如何在 SwiftUI 中做同样的事情。或者在 SwiftUI 中实现类似行为的最佳实践是什么?

顺便说一句,我知道我们可以使用

UIViewRepresentable
来映射 UIKit 视图,或者如果我们使用像 SwiftUI-Introspect 这样的库,我们可以获取底层 UIKit 滚动视图并将
clipsToBounds
设置为 false。但我想知道是否有原生 SwiftUI 方法可以做到这一点。

这是一些代码,可以使问题更加清晰。

struct MyScrollView: View {
    var body: some View {
        VStack(spacing: 0) {
            header
            content
        }
    }
    
    var header: some View {
        Text("Header")
            .padding()
            .frame(minHeight: 200)
    }
    
    var content: some View {
        ScrollView {
            Text("Content").padding()
            Text("Content").padding()
            Text("Content").padding()
            Text("Content").padding()
            Text("Content").padding()
        }
        .frame(maxWidth: .infinity)
        .background(.orange)
    }
} 

这就是它呈现的内容,当我向上滚动时,滚动视图内容被剪切。

enter image description here

我正在寻找的是这样的,当我向上滚动时,我应该能够看到标题下的内容。

enter image description here

提前致谢:)

swift swiftui uikit
2个回答
1
投票

编辑:使用堆栈并向滚动视图添加一个空标题:

struct MyScrollView: View {
    var body: some View {
        ZStack {
            content
            VStack {
                header
                Spacer()
            }
        }
    }
    
    var header: some View {
        Text("Header")
            .padding()
            .frame(minHeight: 200)
    }
    
    var content: some View {
        ScrollView {
            Spacer()
                .frame(height:200)
            Text("Content").padding()
            Text("Content").padding()
            Text("Content").padding()
            Text("Content").padding()
            Text("Content").padding()
            Text("Content").padding()
            Text("Content").padding()
            Text("Content").padding()
            Text("Content").padding()
        }
        .frame(maxWidth: .infinity)
        .background(.orange)
    }
}

0
投票

在 iOS 17 上,SwiftUI 有一个名为

.scrollClipDisabled()

的视图修饰符

在此版本之前,你可以这样做

public extension UIScrollView {
    override var clipsToBounds: Bool { 
        get { false } 
        set {}
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.