【问题标题】:How to update page indicator in SwiftUI?如何在 SwiftUI 中更新页面指示器?
【发布时间】:2021-08-06 05:45:11
【问题描述】:

界面:SwiftUI
生命周期:SwiftUI
语言:斯威夫特
Xcode 版本:12.5

我想在自定义轮播视图中使用带有核心数据的页面指示器。指标在下面的当前代码中可以正常工作,但是如果从 Core Data 中添加或删除页面,指标的数量不会改变。

添加或删除页面时,pages.count 发生了变化,但我检查了 func makeUIView() 没有再次执行。

当 self.pages.count 的值发生变化时,如何自动重新加载 func makeUIView?

struct PageControl : UIViewRepresentable {
    @EnvironmentObject var ani: CarouselModel
    @FetchRequest(entity: Page.entity(),
                  sortDescriptors: [NSSortDescriptor(keyPath: \Page.name, ascending: true)]
    ) var pages: FetchedResults<Page>
    
    func makeUIView(context: Context) -> UIPageControl {
        let view = UIPageControl()
        view.currentPageIndicatorTintColor = UIColor(red: 100/255, green: 255/255, blue: 177/255, alpha: 1.0)
        view.pageIndicatorTintColor = UIColor(red: 100/255, green: 255/255, blue: 177/255, alpha: 1.0).withAlphaComponent(0.2)
        view.numberOfPages = self.pages.count + 1
        
        return view
    }
    
    func updateUIView(_ uiView: UIPageControl, context: Context) {
        // Updating Page Indicator When Ever Page Changes...
        DispatchQueue.main.async {
            uiView.currentPage = Int(self.ani.count)
        }
    }
}

【问题讨论】:

    标签: swift swiftui uipageviewcontroller uipagecontrol uiviewrepresentable


    【解决方案1】:

    我明白了!

    将下面的行从 func makeUIView 放到 func updateUIView

    uiView.numberOfPages = pages.count + 1 
    

    决赛

    func updateUIView(_ uiView: UIPageControl, context: Context) {
                // Updating Page Indicator When Ever Page Changes...
                DispatchQueue.main.async {
                    uiView.currentPage = Int(self.ani.count)
                    uiView.numberOfPages = pages.count + 1
                }
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多