0
  • 通话时router1(),快速(白屏)闪烁
  • 通话router2()时无闪烁

注意:在这两种情况下都navigationLevelsStack只有1 个元素

看来这仅取决于router1()使用ForEach?

有没有办法ForEach不引起闪烁?

@ViewBuilder func router1(_ stateProvider: StateProvider,_ events: Events) -> some View {

    ZStack {
        ForEach(navigationLevelsStack, id: \.self.URI) { screenIdentifier in
             self.screenPicker(screenIdentifier)
        }
    }

}

@ViewBuilder func router2(_ stateProvider: StateProvider,_ events: Events) -> some View {

    ZStack {
             self.screenPicker(navigationLevelsStack.last!)
        }
    }

}
4

1 回答 1

1

我找到了原因:

因为self.URI是一个计算属性,所以每次调用都需要时间来处理。

更新:

实际上原因不是因为.URI是计算属性。id这与旧的 ForEach值被新的 ForEach值替换这一事实有关id。如果你想避免闪烁,可以渲染不同的视图,但 ForEachid应该保持不变。所以,它是一个索引号是有意义的。

于 2021-05-18T18:19:16.527 回答