小编Sim*_*eil的帖子

尝试分页 SwiftUI 时,进度视图不会在第二次加载时显示

尝试分页时,进度视图不会在第二次加载时显示。当我滚动到底部时,进度视图将出现一次。但其他时候则不然。这似乎只在我使用某种动画时才会发生。

如果我只有一个像“正在加载...”这样的静态文本,它就会按预期工作。我添加了一个部分组,它在其中检查条件以验证是否应该显示它。不确定我是否应该使用像 UIKit 中的加载指示器那样的“停止动画”之类的东西

在此输入图像描述

struct ContentView: View {
    @State var movies: [Movie] = []
    @State var currentPage = 1
    @State private var isLoading = false
    
    var body: some View {
        NavigationView {
            List {
                Section {
                    
                } header: {
                    Text("Top Movies")
                }
                
                ForEach(movies) { movie in
                    HStack(spacing: 8) {
                        AsyncImage(url: movie.posterURL, scale: 5) { image in
                            image
                                .resizable()
                                .aspectRatio(contentMode: .fit)
                                .frame(width: 100)
                                .cornerRadius(10)
                        } placeholder: {
                            ProgressView()
                                .frame(width: 100)
                        }
                        
                        VStack(alignment: .leading, spacing: 10) {
                            Text(movie.title)
                                .font(.headline)
                            Text(movie.overview)
                                .lineLimit(5)
                                .font(.subheadline) …
Run Code Online (Sandbox Code Playgroud)

xcode pagination swiftui

9
推荐指数
1
解决办法
828
查看次数

跟踪列表 SwiftUI 中的滚动位置

因此,过去我一直使用滚动视图跟踪滚动位置,但我陷入了需要使用列表跟踪位置的情况。我使用列表是因为我想要一些内置的空间来创建我的视图,例如默认的列表样式。

我可以使用 PreferenceKeys 获取该值,但问题是当我向上滚动到远处时,PreferenceKey 值将默认返回到其位置 0,从而破坏了我的 show shy 标题视图逻辑。

这是TrackableListView代码

struct TrackableListView<Content: View>: View {
    let offsetChanged: (CGPoint) -> Void
    let content: Content
    
    init(offsetChanged: @escaping (CGPoint) -> Void = { _ in }, @ViewBuilder content: () -> Content) {
        self.offsetChanged = offsetChanged
        self.content = content()
    }
    
    var body: some View {
        List {
            GeometryReader { geometry in
                Color.clear.preference(key: ScrollOffsetPreferenceKey.self, value: geometry.frame(in: .named("ListView")).origin)
            }
            .frame(width: 0, height: 0)
            content
                .offset(y: -10)
        }
        .coordinateSpace(name: "ListView")
        .onPreferenceChange(ScrollOffsetPreferenceKey.self, perform: offsetChanged)
    }
} …
Run Code Online (Sandbox Code Playgroud)

xcode list swiftui

5
推荐指数
1
解决办法
1821
查看次数

标签 统计

swiftui ×2

xcode ×2

list ×1

pagination ×1