Open PeterKovacs89 opened 2 years ago
I can attest to that. I couldn't find out what is going on until I discovered this issue. It doesn't have to be presented with fullScreen
btw.
Personally,
@Root var home = makeHome
which navigates to a Withdraw
view with the push
mechanism.@Route(.push) var withdraw = makeWithdraw
has a button that opens the address scanner screen (A screen that scans for QR codes with camera) @Route(.push) var addressScanner = makeAddressScanner
.AVCaptureDevice.requestAccess(for: .video)
video permission, which, pops both address scanner view, and the withdraw view until it navigates back to the home view.home
.As @PeterKovacs89 mentions the internal func appear(_ int: Int)
is called with int = -1
.
Tricky issue to fix honestly. Perhaps a way to temporarily suspend the appear-function would work? 🤔
95% related to iOS16 new NavigationStack thing, getting the same symptoms with Bluetooth pairing request - it breaks the navigation, exactly when the system alert window appears.
Hello,
I've got yesterday into this issue and started to debug it. I found what was causing this behavior, in my case I had a navigation drawer that was wrapping the content and inside I had a GeometryReader
around the whole drawer, and when presenting alerts or keyboard is showing, that GeometryReader
had to rerender it's children and thus the entire stack was popping to root each time because all the main content was inside of it.
I moved the content view in the drawer out of GeometryReader
and it worked as expected. In your case it might not be a GeometryReader
but the idea is that when presenting default alerts or keyboard, it may trigger a rerender somewhere in the begining of stack.
Another way that can help you with this is to conform views to Equatable
and let SwiftUI
know if the view needs to be rerendered or not, but this will not help in cases like mine because GeometryReader
will rerender if something triggers it.
Hope this will help.
Reproduction steps:
NavigationCoordinatable
coordinator using@Route(.fullScreen) var playback = playbackView
NavigationCoordinatable
class theinternal func appear(_ int: Int)
is getting called by this alert presentation with id -1.Requesting the permission later did not help, it triggers the same mechanism. Using a dedicated Coordinator for the presented screen did not help either.
I can add more code snippets if it helps.