SwiftUI,在 ZStack 中使用 ForEach 会导致屏幕闪烁

问题描述

注意:在这两种情况下,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!)
        }
    }

}

解决方法

我找到了原因:

因为@echo off mode con: cols=80 lines=27 title Connection Restart color 1f cls echo This program restarts Internet Connection adapter. echo. echo List of network adapters (Internet adapters) netsh interface show interface echo ========================================================================== :: Setting Interface Name set InterfaceName=Local Area Connection :Disadling adapter echo. & echo echo RESTARTING "%InterfaceName%" adapter. WAIT... netsh interface set interface "%InterfaceName%" disable echo "%InterfaceName%" adapter disabled. Wait... echo. & echo.========== timeout /t 5 >nul :Enabling adapter netsh interface set interface "%InterfaceName%" enable echo "%InterfaceName%" adapter Enabled. Wait... echo. & echo.========== echo Procedure completed successfully timeout /t 6 >nul EXIT 是一个计算属性,所以每次被调用都要花时间处理。

更新:

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