How can I implement PageView in SwiftUI?

后端 未结 4 544
被撕碎了的回忆
被撕碎了的回忆 2020-11-29 09:52

I am new to SwiftUI. I have three views and I want them in a PageView. I want to move each Views by swipe like a pageview and I want the little dots to indicate in which vie

4条回答
  •  醉酒成梦
    2020-11-29 10:04

    For apps that target iOS 14 and later, the answer suggested by @pawello2222 should be considered the correct one. I have tried it in two apps now and it works great, with very little code.

    I have wrapped the proposed concept in a struct that can be provided with both views as well as with an item list and a view builder. It can be found here. The code looks like this:

    @available(iOS 14.0, *)
    public struct MultiPageView: View {
        
        public init(
            pages: [PageType],
            indexDisplayMode: PageTabViewStyle.IndexDisplayMode = .automatic,
            currentPageIndex: Binding) {
            self.pages = pages.map { $0.any() }
            self.indexDisplayMode = indexDisplayMode
            self.currentPageIndex = currentPageIndex
        }
        
        public init(
            items: [Model],
            indexDisplayMode: PageTabViewStyle.IndexDisplayMode = .automatic,
            currentPageIndex: Binding,
            pageBuilder: (Model) -> ViewType) {
            self.pages = items.map { pageBuilder($0).any() }
            self.indexDisplayMode = indexDisplayMode
            self.currentPageIndex = currentPageIndex
        }
        
        private let pages: [AnyView]
        private let indexDisplayMode: PageTabViewStyle.IndexDisplayMode
        private var currentPageIndex: Binding
        
        public var body: some View {
            TabView(selection: currentPageIndex) {
                ForEach(Array(pages.enumerated()), id: \.offset) {
                    $0.element.tag($0.offset)
                }
            }
            .tabViewStyle(PageTabViewStyle(indexDisplayMode: indexDisplayMode))
        }
    }
    

提交回复
热议问题