【发布时间】:2021-07-02 00:11:26
【问题描述】:
我是 SwiftUI 的新手,我想从联系人应用程序重新创建联系人卡片视图。 在下面的列表中滚动时,我正在努力平滑地调整顶部图像的大小。
我曾尝试使用 GeometryReader,但在那里遇到了问题。 例如,当向上滚动时,图片大小会突然跳到我指定的 minimumPictureSize。向上滚动时会发生相反的情况:当我停止滚动时,它会突然停止调整大小。
想要的行为:https://gifyu.com/image/Ai04
当前行为:https://gifyu.com/image/AjIc
struct SwiftUIView: View {
@State var startOffset: CGFloat = 0
@State var offset: CGFloat = 0
var minPictureSize: CGFloat = 100
var maxPictureSize: CGFloat = 200
var body: some View {
VStack {
Image("person")
.resizable()
.frame(width: max(minPictureSize, min(maxPictureSize, minPictureSize + offset)),
height: max(minPictureSize, min(maxPictureSize, minPictureSize + offset)))
.mask(Circle())
Text("startOffset: \(startOffset)")
Text("offset: \(offset)")
List {
Section {
Text("Top Section")
}.overlay(
GeometryReader(){ geometry -> Color in
let rect = geometry.frame(in: .global)
if startOffset == 0 {
DispatchQueue.main.async {
startOffset = rect.minY
}
}
DispatchQueue.main.async {
offset = rect.minY - startOffset
}
return Color.clear
}
)
ForEach((0..<10)) { row in
Section {
Text("\(row)")
}
}
}.listStyle(InsetGroupedListStyle())
}.navigationBarHidden(true)
}
}
【问题讨论】:
标签: swift swiftui geometryreader