当苹果的订阅控制器出现时,NavigationStack 内的全屏封面会被重绘

问题描述 投票:0回答:1

我有一个

NavigationStack
,里面有一个按钮。点击按钮会在
SubscriptionStoreView
内显示 Apple 的
fullScreenCover 
。让我惊讶的是,当我点击视图内的“订阅”时,Apple 用于完成购买的控制器被呈现/关闭,它会导致
fullScreenCover 
被重新绘制,导致闪烁并重置商店视图的状态。

import SwiftUI
import StoreKit

struct TestView: View {
    @State private var isShowingSubscriptionScreen: Bool = false
    
    var body: some View {
        NavigationStack {
            List {
                Section {
                    HStack {
                        Label("Subscribe", systemImage:"crown.fill")
                            .fullScreenCover(isPresented: $isShowingSubscriptionScreen) {
                                SubscriptionStoreView(groupID: "4CD3E8A1")
                            }
                            .onTapGesture {
                                isShowingSubscriptionScreen = true
                            }
                    }
                }
            }
            
        }
    }
}

enter image description here

此外,令我惊讶的是删除

HStack
部分解决了问题。

我可以通过将

fullScreenCover
附加到导航堆栈之外的不同视图来轻松解决此问题,但是我想知道为什么会发生这种情况的解释。即使没有状态,Apple 的控制器如何影响状态并导致我的视图重绘。

swiftui storekit storekit2
1个回答
0
投票

状态问题是因为你没有在任何地方调用

isShowingSubscriptionScreen
getter。这是因为你的事实来源是错误的,它不应该是布尔值,而应该是你想要显示的组ID,例如像这样的东西:

struct TestView: View {
    @State private var showGroupID: Group.ID? = nil
    
    var body: some View {
        NavigationStack {
            List {
                Section {
                    HStack {
                        Label("Subscribe", systemImage:"crown.fill")
                            .fullScreenCover(item: $showGroupID) { groupID in
                                SubscriptionStoreView(groupID: groupID)
                            }
                            .onTapGesture {
                                showGroupID = "4CD3E8A1"
                            }
                    }
                }
            }
            
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.