SwiftUI模式表在半秒钟后自行关闭



我有一个模态表,下面是代码:

设置仪表板视图:

@State private var notificationsSettingsSheet = false

var body: some View {

Button(action: {
self.notificationsSettingsSheet.toggle()
}) {

VStack(alignment: .leading) {
HStack(alignment: .top, spacing: 4) {
Label("Set Daily Reminders", systemImage: "alarm").foregroundColor(Color("TextColor"))
.font(.system(.headline, design: .rounded))

Spacer()
}

}
}
.sheet(isPresented: $notificationsSettingsSheet) {
NotificationSettingsModal()
} 
}

通知设置模式:

var body: some View {
ZStack(alignment: .bottom) {
ScrollView {

VStack(alignment: .leading, spacing: 0) {


Text("Daily Reminders")
.font(.system(.title, design: .rounded))
.fontWeight(.bold)
.padding(.top, headingTopPadding)
.padding(.horizontal, headingHorizontalPadding).foregroundColor(Color("TextColor"))

Spacer().frame(height: 164)
}.frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity)



Spacer().frame(height: 64)
}
}.background(Color("BackgroundColor").edgesIgnoringSafeArea(.all))
}

当我启动应用程序并打开我的工作表时,在大约50%的情况下,工作表会在半秒钟后自行关闭。如果我在那之后打开床单,一切都会好起来的。是什么原因导致了这个问题?

这可能无法解决上述问题,但对其他人有用

在大多数情况下,当视图由于某些变量的更改而被重新绘制时,就会出现此问题。请注意,可能是父视图更改了一些变量。

调试这种行为的最好方法是使用这里描述的Swift破解技术。其思想是通过在body属性中打印print(Self._printChanges())来确定是什么更改导致视图重新加载。请注意,通过这样做,您将暂时需要添加一个显式返回。

然后,观察控制台,在大多数情况下,您将能够识别问题并重构代码。

根据我的经验(这里似乎不是这样(,当在视图和父视图中都使用@Environment(.editMode) var editMode时,这种情况经常发生。由于某些原因,在显示图纸时,该值在两个视图中都会发生更改,从而导致视图被重新绘制,图纸被关闭。

我本周在homeView上设置为NavigationView时删除了下面的代码,解决了这个问题,这导致我的subView的工作表在第一次显示时自动取消。

NavigationView {...}
// .navigationViewStyle(StackNavigationViewStyle())

最新更新