Xcode 使用 Mapbox/UIKIT 升级 12.4 -> 13.2 后 SwiftUI TabView 清除背景?

SwiftUI TabView clear background after Xcode upgrade 12.4 -> 13.2 with Mapbox/UIKIT?

从 Xcode 12.4 升级到 13.2 后,我的应用程序的 TabView 背景在第一次出现在我的 Mapbox 地图上时是清晰的,但按钮出现并正常工作。

当 TabView 出现在我的其他 SwiftUI 视图上方时,它的外观和行为都正常

如果我点击按钮并导航到另一个视图,TabView 的背景会恢复正常并且在其余时间都可以正常工作,即使在导航回 MAPBOX 地图时,它也不会第一次出现在 Mapbox 地图上时显示正常...???

为了尝试解决这个问题,我从我的项目中删除了所有修改 UIKits UITabBar 使用的 TabView 的代码,以确保没有一些代码改变它的行为。

在升级 Xcode 之前,这从来都不是问题,但似乎由于某种原因,新的 Xcode 与 Mapbox 或 UIKit 有问题???

查看下面的照片,TabView 第一次出现在地图上时显示为空白,但如果我导航离开然后返回到地图,它将正常显示并且在其余时间工作正常......?

^ 第一次在地图上背景是空白的

^导航离开然后return到地图背景正常??

主视图

struct MainView: View {
    @EnvironmentObject var session: SessionStore
    
    @State private var selectedTab = 1
    
    var body: some View {
        TabView(selection: $selectedTab) {
            NewsFeed()
                .onTapGesture { self.selectedTab = 0 }
                .tabItem { Image(systemName: "lineweight").font(.title) }
                .tag(0)
            MapScreen(
                mapVM: MapViewModel(currentUserPublisher: session.$currentUser),
                popupVM: PopupViewModel(currentUserPublisher: session.$currentUser)
            )
                .onTapGesture { self.selectedTab = 1 }
                .tabItem { Image(systemName: "lineweight") }
                .tag(1)
            ProfileView()
                .onTapGesture { self.selectedTab = 2 }
                .tabItem { Image(systemName: "lineweight").font(.title) }
                .tag(2)
        }
    }
}

MAPBOX 地图视图

import SwiftUI
import Mapbox

struct MapScreen: View {
    @EnvironmentObject var session: SessionStore
   
    @StateObject var mapVM: MapViewModel
    @StateObject var popupVM: PopupViewModel
    
    @State private var showSheet = false
    
    var body: some View {
        NavigationView {
            ZStack(alignment: .bottom) {
                MapboxMapView(mapVM : mapVM, popupVM: popupVM)
                PopupAnchorView(modalManager: popupVM)
            }
            .navigationBarHidden(true)
            .navigationViewStyle(StackNavigationViewStyle())
            .onAppear { 
                if popupVM.data == nil {
                    self.popupVM.newModal(position: .closed) {
                        PopupFull(popupVM: popupVM)
                    }
                }
            }
        }
    }
}

iOS 15 更改了 TabBar 下方没有可滚动内容时的默认外观。

对我有用的(将其改回默认的 iOS 14)是在 onAppear 语句中修改 TabBar:

TabView {
    ...
}
.onAppear {
    let tabBarAppearance = UITabBarAppearance()
    tabBarAppearance.configureWithDefaultBackground()
    UITabBar.appearance().scrollEdgeAppearance = tabBarAppearance
}