我正在开发一个SwiftUI应用程序,并且出现了警告,可能是因为我忽略了这些警告。我想展示我收到的警告,我希望有人能指出我可能做错了什么。
以下是相关代码:
struct CustomListView: View {
var localList:[SomeManagedObject], moc:NSManagedObjectContext
@State var showingOtherView = false
func handleCustomItem(_ argument: SomeManagedObject) {
print(#function)
self.showingOtherView.toggle()
..... Do useful things .....
}
var body: some View {
List {
ForEach(self.localList) {
item in
HStack {
Spacer()
Button(action: {
self.handleCustomItem(item)
})
{
Text(item.expression!)
.foregroundColor(Color.red))
.font(.headline)
.padding(.horizontal, 11).padding(.vertical, 15)
}.sheet(isPresented: $showingOtherView) {
OtherView()
}
Spacer()
}
}
}
}
}这是OtherView的代码:
import SwiftUI
import CoreData
struct OtherView: View {
var body: some View {
Text("Hello OtherView")
}
}当我单击列表中的一个按钮并执行handleCustomItem()函数时,我可以在调试控制台中看到以下消息:
上呈现 (来自),它已经呈现了。2021-04-20 上呈现 (来自),它已经呈现了。.2021-04-20 上呈现 (来自),它已经呈现了。
如果一个人能看到一些东西,给我一个提示,告诉我我能做些什么,那就太好了。
发布于 2021-04-20 15:24:37
你的.sheet(isPresented: $showingOtherView) {在ForEach里面。当您将showingOtherView设置为true时,ForEach中的所有工作表都将尝试呈现。那是一堆床单。
你想把它放在ForEach之外。
var body: some View {
List {
ForEach(self.localList) {
item in
HStack {
Spacer()
Button(action: {
self.handleCustomItem(item)
})
{
Text(item.expression!)
.foregroundColor(Color.red))
.font(.headline)
.padding(.horizontal, 11).padding(.vertical, 15)
}
Spacer()
}
}
}
.sheet(isPresented: $showingOtherView) { /// here should be fine
OtherView()
}
}发布于 2022-03-27 17:54:38
我有同样的警告消息/错误,但我的理由不是太多的纸张,在您的情况下。我试着把一张又一张的纸呈现得太快了,就像这样:
naviViewModel.isSUModalPresented = false
naviViewModel.isPaidContentIntroPresented = true我不得不把它改为:
naviViewModel.isSUModalPresented = false
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { // or even shorter
naviViewModel.isPaidContentIntroPresented = true
}现在它工作得很好。SwiftUI只需要几毫秒就能完成动画。
https://stackoverflow.com/questions/67180982
复制相似问题