簡體   English   中英

SwiftUI - 如何將選擇添加到 TabView

[英]SwiftUI - How to add selection to TabView

我有一個 JSON API,我想在 PageTabView 中顯示內容。 它是成功的,但是每次我滑動頁面時視圖都會變得遲鈍,我在這里得到了解決方案https://stackoverflow.com/a/66591530/15132219 但問題是現在頁面點不想在我每次滑動頁面時都改變。 我已經嘗試解決了幾天但仍然找不到解決方案,這是我的代碼(我無法顯示 API 鏈接,因為它不可共享)

struct HomeBanner: View{
    @State var banners: [BannerJSON] = []
    private let timer = Timer.publish(every: 5, on: .main, in: .common).autoconnect()
    @State var index = 0
    var body: some View{
        
        let bannerPic = "API_LINK"
        
        GeometryReader{ geometry in
            VStack(spacing: 2){
                if banners.isEmpty{
                    Spacer()
                    ProgressView()
                    Spacer()
                }else{
                    VStack{
                        ZStack{
                            TabView(selection: $index){
                                ForEach(banners, id: \.id){banner in
                                    VStack{
                                        //MARK: Display Banner
                                        NavigationLink(destination: DetailBanner(banner: banner
                                        )){
                                            WebImage(url: URL(string: bannerPic + banner.IMAGE))
                                                .resizable()
                                                .scaledToFit()
                                        }
                                    }
                                }
                            }.tabViewStyle(PageTabViewStyle())
                            .frame(width: geometry.size.width, height: geometry.size.height / 3.5)
                        }
                    }
                }
            }.onAppear{
                getBannerData(url: "API_LINK"){
                    (banners) in
                    self.banners = banners
                }
            }
        }
    }
}

struct BannerJSON{
    var RECORD_STATUS: String
    var IMAGE: String
    var URL_LINK: String
    var TITLE: String
    var DESCRIPTION: String
}

extension BannerJSON: Identifiable, Decodable{
    var id: String {return TITLE}
}
struct SampleTabView: View {
    @State var selectedIndex: Int = 0
    @State var banners: [Int] = [0,1,2,3,4,5]
    var body: some View {
        TabView(selection: $selectedIndex){
            ForEach(0..<banners.count, id: \.self){ idx in
                Text(banners[idx].description)
                    .tag(idx)//This line is crutial for selection to work put in on the VStack
                    //You can also make the tag the banner in your loop but your selection variable must be a Banner too. 
            }
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM