Программируем под IOS
Anonymous
Содержимое TabView выходит за пределы безопасных областей в NavigationStack.
Сообщение
Anonymous » 19 ноя 2025, 12:54
Код: Выделить всё
import SwiftUI
struct OnboardingView: View {
@ObservedObject var viewModel: OnboardingViewModel
var body: some View {
TabView(selection: $viewModel.currentPage) {
ForEach(OnboardingPages.allCases, id: \.rawValue) { page in
getPageView(for: page)
.tag(page.rawValue)
}
}
.tabViewStyle(PageTabViewStyle(indexDisplayMode: .never))
}
@ViewBuilder
private func getPageView(for page: OnboardingPages) -> some View {
VStack(spacing: 32) {
Spacer()
VStack(alignment: .center, spacing: 8) {
Text(page.title)
.font(.urb(.semiBold, size: 32))
.foregroundStyle(.white)
Text(page.description)
.font(.urb(.regular, size: 16))
.foregroundStyle(.white)
.multilineTextAlignment(.center)
}
continueButton
dots
}
.padding(.horizontal, 16)
.padding(.bottom, 35)
.ignoresSafeArea()
.background(
Image(page.image)
.resizable()
.scaledToFill()
.ignoresSafeArea()
)
}
Стек навигации:
Код: Выделить всё
struct RootView: View {
@StateObject private var router = Router()
var body: some View {
NavigationStack(path: $router.path) {
Color.clear
.navigationDestination(for: Route.self) { route in
switch route {
case .launch:
LaunchScreen()
.onAppear { router.decideInitialFlow() }
.navigationBarBackButtonHidden(true)
case .onboarding:
OnboardingView(viewModel: OnboardingViewModel(finish: router.finishOnboarding))
.navigationBarBackButtonHidden(true)
}
}
}
}
}
Проблема в следующем:
Даже без NavigationStack ignoreSafeArea вытягивает TabView за пределы безопасной области.
Если модификатор ignoresSafeArea используется с TabView, то содержимое выходит за пределы безопасной зоны.
Если модификатор ignoresSafeAre не используется с TabView, изображение не покрывает весь экран.
VStack и нет безопасной области:
Vstack и безопасная область:
Подробнее здесь:
https://stackoverflow.com/questions/798 ... ationstack
1763546056
Anonymous
[code]import SwiftUI struct OnboardingView: View { @ObservedObject var viewModel: OnboardingViewModel var body: some View { TabView(selection: $viewModel.currentPage) { ForEach(OnboardingPages.allCases, id: \.rawValue) { page in getPageView(for: page) .tag(page.rawValue) } } .tabViewStyle(PageTabViewStyle(indexDisplayMode: .never)) } @ViewBuilder private func getPageView(for page: OnboardingPages) -> some View { VStack(spacing: 32) { Spacer() VStack(alignment: .center, spacing: 8) { Text(page.title) .font(.urb(.semiBold, size: 32)) .foregroundStyle(.white) Text(page.description) .font(.urb(.regular, size: 16)) .foregroundStyle(.white) .multilineTextAlignment(.center) } continueButton dots } .padding(.horizontal, 16) .padding(.bottom, 35) .ignoresSafeArea() .background( Image(page.image) .resizable() .scaledToFill() .ignoresSafeArea() ) } [/code] Стек навигации: [code]struct RootView: View { @StateObject private var router = Router() var body: some View { NavigationStack(path: $router.path) { Color.clear .navigationDestination(for: Route.self) { route in switch route { case .launch: LaunchScreen() .onAppear { router.decideInitialFlow() } .navigationBarBackButtonHidden(true) case .onboarding: OnboardingView(viewModel: OnboardingViewModel(finish: router.finishOnboarding)) .navigationBarBackButtonHidden(true) } } } } } [/code] Проблема в следующем: [list] [*]Даже без NavigationStack ignoreSafeArea вытягивает TabView за пределы безопасной области. [*]Если модификатор ignoresSafeArea используется с TabView, то содержимое выходит за пределы безопасной зоны. [*]Если модификатор ignoresSafeAre не используется с TabView, изображение не покрывает весь экран. [/list] VStack и нет безопасной области: Vstack и безопасная область: [img]https://i.sstatic.net/mdn7tdZDm.png[/img] [img]https://i.sstatic.net/pBjaeHwfm.png[/img] Подробнее здесь: [url]https://stackoverflow.com/questions/79823359/content-of-tabview-is-going-beyond-safe-areas-in-the-navigationstack[/url]