SwiftUI iOS 26 TabView: фон добавляется к прокручиваемому содержимомуIOS

Программируем под IOS
Ответить
Anonymous
 SwiftUI iOS 26 TabView: фон добавляется к прокручиваемому содержимому

Сообщение Anonymous »

Я новичок в разработке SwiftUI и начал разработку приложения для нашей компании в начале этого года. Я решил посмотреть новую iOS и убедиться, что приложение не сломается. Теперь у меня возникла проблема: мой TabView не является полупрозрачным, даже содержимое можно прокручивать. Теперь мне интересно, какой решающий фактор решает iOS, когда и когда не добавлять фон. Для контекста я добавил свой TabView с двумя базовыми представлениями (AssortmentView, ListNavigation). Я также попытался удалить оболочку SwipeableContentView, чтобы проверить, не допустил ли я там ошибок, но поведение кажется таким же.
Что-то я делаю неправильно, чтобы получить полупрозрачный TabView?

Код: Выделить всё

var body: some View {
TabView(selection: $tabRouter.currentTab) {
Overview(navigationManager: tabRouter.homeManager, activeType: $selectedProductType)
.environment(\.navigationManager, tabRouter.homeManager)
.tabItem {
Label("Home", systemImage: "house")
}
.tag(WogTab.home)
AssortmentView(navigationManager: tabRouter.assortmentManager, activeType: $selectedProductType)
.environment(\.navigationManager, tabRouter.assortmentManager)
.tabItem {
Label(String(localized: "assortment"), systemImage: "list.bullet")
}
.tag(WogTab.assortment)
SearchEntryPoint(navigationManager: tabRouter.searchManager, activeType: $selectedProductType)
.environment(\.navigationManager, tabRouter.searchManager)
.tabItem {
Label(String(localized: "search"), systemImage: "magnifyingglass")
}
.tag(WogTab.search)
CartIndex(navigationManager: tabRouter.cartManager)
.environment(\.navigationManager, tabRouter.cartManager)
.tabItem {
Label(String(localized: "cart"), systemImage: "cart")
}
.tag(WogTab.cart)
.badge(cart.amountOfItems)

MyWogIndex(navigationManager: tabRouter.mywogManager)
.tabItem {
Label("MyWoG", systemImage: "person")
}
.tag(WogTab.mywog)
}

}

struct AssortmentView: View {

@ObservedObject var navigationManager: NavigationManager
@Binding var activeType: StaticProductType
@Namespace private var animation

var body: some View {
NavigationStack(path: $navigationManager.path) {
VStack(spacing: 0) {
ProductTypeNavigation(
activeType: $activeType,
animation: animation
)
.padding(.bottom, 10)

SwipeableContentView(selection: $activeType, preloadAdjacent: false) { type, shouldLoad in
ListNavigation(type: type, shouldLoad: shouldLoad)
}

}
.addToolbar()
.navigationDestination(for: AppRoute.self) { route in
switch route {
case .product(.detail(let productId)):
ProductDetailView(productId: productId)
case .product(.list(let typeId, let platformId, let listType, let navTitle)):
ProductList(productTypeId: typeId, platformId: platformId, listType: listType, navTitle: navTitle)
case .home(.overview(let type)):
OverviewTypeView(type: type, shouldLoad: true)
default:
EmptyView()
}
}
}
}
}

struct ListNavigation: View {

@StateObject private var viewModel = NavigationViewModdel()
@State private var nodeId: Int
@State private var level: Int
private let type : StaticProductType
let shouldLoad: Bool
@State private var contextType : StaticProductType

init(type: StaticProductType, shouldLoad: Bool) {
self.nodeId = type.parent
self.type = type
self.contextType = type
if (type.parent == 0) {
self.level = 0
} else {
self.level = 1
}
self.shouldLoad = shouldLoad
}

var body: some View {
ScrollView {
if shouldLoad {
if viewModel.isRefreshing {
ProgressView()
} else {
VStack {
if (type.parent == 0 && self.level > 0) || (type.parent > 0 && self.level > 1) &&  !viewModel.navigation.isEmpty {
HStack {
Label("Back", systemImage: "arrow.left")
.onTapGesture {
self.level -= 1
if self.level >= 1 {
self.nodeId = contextType.parent
} else {
self.nodeId = 0
}
}
Spacer()
}
}
ForEach(viewModel.navigation) { navigation in

ListNavigationElement(navigation: navigation, type: type, level: level) {

self.level += 1
if self.type == .all && self.level == 1 {
switch navigation.productTypeId {
case 2: contextType = .movies
case 3: contextType = .toys
case 5: contextType = .digital
case 6: contextType = .books
default: contextType = .games
}
}
self.nodeId = navigation.nodeId
}
}
}

}
} else {
Color.clear
.frame(maxWidth: .infinity, maxHeight: .infinity)
}

}
.padding(10)
.task(id: nodeId) {
if nodeId == 0 {
await viewModel.loadHomeNavigation(langId: 1)
} else {
await viewModel.loadNavigation(langId: 1, parent: nodeId)
}
}
}

}
Изображение



Подробнее здесь: https://stackoverflow.com/questions/798 ... le-content
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»