diff --git a/composeApp/src/commonMain/kotlin/com/nuvio/app/core/ui/Components.kt b/composeApp/src/commonMain/kotlin/com/nuvio/app/core/ui/Components.kt index c35736fb1..dca8c7e80 100644 --- a/composeApp/src/commonMain/kotlin/com/nuvio/app/core/ui/Components.kt +++ b/composeApp/src/commonMain/kotlin/com/nuvio/app/core/ui/Components.kt @@ -151,7 +151,7 @@ fun NuvioScreenHeader( Row( modifier = modifier .fillMaxWidth() - .padding(top = statusBarTop + NuvioTokens.Space.s40, bottom = NuvioTokens.Space.s4), + .padding(bottom = NuvioTokens.Space.s4), horizontalArrangement = Arrangement.End, verticalAlignment = Alignment.CenterVertically, content = actions, diff --git a/iosApp/iosApp/ContentView.swift b/iosApp/iosApp/ContentView.swift index 12337c38d..bdde594a0 100644 --- a/iosApp/iosApp/ContentView.swift +++ b/iosApp/iosApp/ContentView.swift @@ -4,9 +4,9 @@ import UIKit import ComposeApp private let nuvioBackgroundColor = UIColor( - red: 0.008, - green: 0.016, - blue: 0.016, + red: 0.051, + green: 0.051, + blue: 0.051, alpha: 1.0 ) @@ -15,10 +15,16 @@ private enum NuvioComposeHost { NuvioPlayerRegistration.register() }() - static func wrap(_ contentController: UIViewController) -> RootComposeViewController { + static func wrap( + _ contentController: UIViewController, + disablesInteractiveContentPopGesture: Bool = false + ) -> RootComposeViewController { _ = registerPlayerBridge contentController.view.backgroundColor = nuvioBackgroundColor - return RootComposeViewController(contentController: contentController) + return RootComposeViewController( + contentController: contentController, + disablesInteractiveContentPopGesture: disablesInteractiveContentPopGesture + ) } } @@ -27,9 +33,14 @@ private enum NuvioComposeHost { /// to the deepest child that requests them. final class RootComposeViewController: UIViewController { private let contentController: UIViewController + private let disablesInteractiveContentPopGesture: Bool - init(contentController: UIViewController) { + init( + contentController: UIViewController, + disablesInteractiveContentPopGesture: Bool + ) { self.contentController = contentController + self.disablesInteractiveContentPopGesture = disablesInteractiveContentPopGesture super.init(nibName: nil, bundle: nil) } @@ -84,12 +95,34 @@ final class RootComposeViewController: UIViewController { .fade } + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + setInteractiveContentPopGestureEnabled(false) + } + + override func viewDidAppear(_ animated: Bool) { + super.viewDidAppear(animated) + setInteractiveContentPopGestureEnabled(false) + } + + override func viewWillDisappear(_ animated: Bool) { + setInteractiveContentPopGestureEnabled(true) + super.viewWillDisappear(animated) + } + func refreshImmersiveSystemUI() { setNeedsUpdateOfHomeIndicatorAutoHidden() setNeedsUpdateOfScreenEdgesDeferringSystemGestures() setNeedsStatusBarAppearanceUpdate() } + private func setInteractiveContentPopGestureEnabled(_ enabled: Bool) { + guard disablesInteractiveContentPopGesture else { return } + if #available(iOS 26.0, *) { + navigationController?.interactiveContentPopGestureRecognizer?.isEnabled = enabled + } + } + private func immersiveController(in controller: UIViewController?) -> UIViewController? { guard let controller else { return nil } @@ -562,7 +595,10 @@ struct DetailComposeView: UIViewControllerRepresentable { appCoordinator.activateTab(named: tabName) } ) - return NuvioComposeHost.wrap(controller) + return NuvioComposeHost.wrap( + controller, + disablesInteractiveContentPopGesture: true + ) } func updateUIViewController(_ uiViewController: UIViewController, context: Context) {} @@ -622,13 +658,12 @@ struct TabContentView: View { private struct NativeToolbarReadabilityFade: View { var body: some View { Rectangle() - .fill(.ultraThinMaterial) - .mask( + .fill( LinearGradient( stops: [ - .init(color: .black, location: 0), - .init(color: .black.opacity(0.78), location: 0.55), - .init(color: .clear, location: 1), + .init(color: Color(uiColor: nuvioBackgroundColor), location: 0), + .init(color: Color(uiColor: nuvioBackgroundColor).opacity(0.78), location: 0.55), + .init(color: Color(uiColor: nuvioBackgroundColor).opacity(0), location: 1), ], startPoint: .top, endPoint: .bottom