Okay, looks like this is entirely down to SwiftUI being weird. It appears to be gaming the UITabBar system. Each time you tap to select a tab, SwiftUI is changing the view controller list for the tab bar. For n tabs, it contains n-1 plain UIViewControllers with empty views, and 1 HostingController<_ViewList_View>. Tapping on a tab will update the content of hosting controller to contain the content of the SwiftUI tab, and it will reassign the UITabBarController's viewControllers property—it moves the HostingController to the index of the tapped tab, and puts a new empty UIViewController at its old position.
Here's the output of that property as I walk through four SwiftUI tabs:
(lldb) po [$21 viewControllers]
<__NSArrayM 0x6000015091d0>(
<_TtGC7SwiftUI19UIHostingControllerVS_14_ViewList_View_: 0x7fddabe0c600>,
<UIViewController: 0x7fdd9bc2eeb0>,
<UIViewController: 0x7fddabf2bd80>,
<UIViewController: 0x7fddabd11b40>
)
(lldb) po [$21 viewControllers]
<__NSArrayM 0x6000015087b0>(
<UIViewController: 0x7fddabd27170>,
<_TtGC7SwiftUI19UIHostingControllerVS_14_ViewList_View_: 0x7fddabe0c600>,
<UIViewController: 0x7fddabf2bd80>,
<UIViewController: 0x7fddabd11b40>
)
(lldb) po [$21 viewControllers]
<__NSArrayM 0x600001504780>(
<UIViewController: 0x7fddabd27170>,
<UIViewController: 0x7fddabd0a9a0>,
<_TtGC7SwiftUI19UIHostingControllerVS_14_ViewList_View_: 0x7fddabe0c600>,
<UIViewController: 0x7fddabd11b40>
)
(lldb) po [$21 viewControllers]
<__NSArrayM 0x6000015083c0>(
<UIViewController: 0x7fddabd27170>,
<UIViewController: 0x7fddabd0a9a0>,
<UIViewController: 0x7fdd9bc3f830>,
<_TtGC7SwiftUI19UIHostingControllerVS_14_ViewList_View_: 0x7fddabe0c600>
)
As you can see, the same UIHostingController<_ViewList_View> is making its way to the index of the current tab, and a new blank controller is being put in its place. With this behavior, it's no surprise that your List view is always being reset—with no good way of recording your scroll offset (or setting it) via your own @State properties, there's no way to persist that information across updates of the view hierarchy.
Please file a bug.