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
}
从 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
}