From ad38d9698a213041b89b302d78e7daf55a381c92 Mon Sep 17 00:00:00 2001 From: Doug Date: Fri, 31 Jul 2026 12:24:19 +0100 Subject: [PATCH] Fix a layout loop. --- .../Navigation/NavigationCoordinators.swift | 2 +- .../Navigation/NavigationTabCoordinator.swift | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/ElementX/Sources/Application/Navigation/NavigationCoordinators.swift b/ElementX/Sources/Application/Navigation/NavigationCoordinators.swift index a54d00144..4559e1b8d 100644 --- a/ElementX/Sources/Application/Navigation/NavigationCoordinators.swift +++ b/ElementX/Sources/Application/Navigation/NavigationCoordinators.swift @@ -335,7 +335,7 @@ extension EnvironmentValues { } private struct NavigationSplitCoordinatorView: View { - @Environment(\.horizontalSizeClass) private var horizontalSizeClass + @Environment(\.tabViewHorizontalSizeClass) private var horizontalSizeClass @Environment(\.scenePhase) private var scenePhase @Bindable var navigationSplitCoordinator: NavigationSplitCoordinator diff --git a/ElementX/Sources/Application/Navigation/NavigationTabCoordinator.swift b/ElementX/Sources/Application/Navigation/NavigationTabCoordinator.swift index e0a2f594d..67192d6a8 100644 --- a/ElementX/Sources/Application/Navigation/NavigationTabCoordinator.swift +++ b/ElementX/Sources/Application/Navigation/NavigationTabCoordinator.swift @@ -297,6 +297,16 @@ import SwiftUI } } +extension EnvironmentValues { + /// The horizontal size class of the ``NavigationTabCoordinatorView`` that contains this view. + /// This provides a stable value regardless of whether the ``TabRailView`` is in the layout hierarchy. + /// + /// The rail consumes width and can cause a layout loop with the ``NavigationSplitCoordinatorView`` + /// when the split becomes compact, hides the rail but then has enough space to become regular and so + /// attempts to show the rail etc. + @Entry var tabViewHorizontalSizeClass: UserInterfaceSizeClass? +} + private struct NavigationTabCoordinatorView: View { @Environment(\.horizontalSizeClass) private var horizontalSizeClass @@ -308,6 +318,7 @@ private struct NavigationTabCoordinatorView: View { var body: some View { tabView + .environment(\.tabViewHorizontalSizeClass, horizontalSizeClass) .sheet(item: $navigationTabCoordinator.sheetModule) { module in module.coordinator?.toPresentable() .id(module.id)