我试图创建一个包含 GeometryReader 的 ScrollView(明确不是相反)。 GeometryReader 应包含具有固定宽度和高度的(图像)。然而,当这样做时,ScrollView 将 View 推到屏幕“上方”,它似乎应用了一些随机的垂直偏移。

ios - SwiftUI ScrollView 中的 GeometryReader 导致奇怪的行为和随机偏移-LMLPHP

var body: some View {
    ScrollView {
        GeometryReader { geometry in
            Image("hp")
                .resizable()
                .aspectRatio(contentMode: .fill)
                .frame(width: geometry.size.width, height: 400)
                .clipped()
        }
    }
}

删除 GeometryReader 并仅插入图像时,它工作正常。

有人可以帮忙吗?

编辑:找到了解决方案。我通过告诉图像它应该与内部几何读取器一样高和宽来实现所需的行为。然后我正在设置内部几何阅读器的框架。我正在使用外部几何阅读器来访问整个屏幕的尺寸
var body: some View {
    GeometryReader { outerGeometry in
        ScrollView {
            VStack {
                GeometryReader { innerGeometry in
                    Image("hp")
                        .resizable()
                        .aspectRatio(contentMode: .fill)
                        .frame(width: innerGeometry.size.width,
                        height: innerGeometry.size.height)
                        .offset(y: innerGeometry.frame(in: .global).minY/7)
                        .clipped()
                }
                    .frame(width: outerGeometry.size.width, height: 300)
            }
        }
    }
}

我希望它可以帮助某人!

最佳答案

GeometryReader 如果按照您的方式放置,则提供的大小不是 ScrollView 本身的大小,而是放置图像的“内容 View ”的大小。 ScrollView 的“内容 View ”大于屏幕尺寸,以便在滚动超过滚动文档大小时在边缘产生 Spring 效果。
正确用法在 @Александр_Грабовский's answer 中。

关于ios - SwiftUI ScrollView 中的 GeometryReader 导致奇怪的行为和随机偏移,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58965503/

10-09 02:45