Post

Replies

Boosts

Views

Activity

Reply to iOS 14 (SwiftUI) Sheet Modals not dismissing and acting randomly weird
@webbguyatwork thanks a lot for your feedback. In my case it does not seem related to the place where I "call" the sheet. See below: var body: some View { &#9;ZStack (alignment: .bottomTrailing) {  &#9; ... &#9;} &#9;.sheet(isPresented: $showNewSuitModal) { // <-- this is the randomly weird modal  &#9; NewSuitView(appData: self.appData, suitsView: self) &#9;} &#9;.alert(isPresented: $showSuitUsedModal) {  &#9; Alert(...) &#9;} }  I am calling the modal from the root ZStack itself (which is the stack containing the button from which I call to open the modal). On the other hand, I am not using Tab Item badges. Still struggling with this :(
Oct ’20
Reply to iOS 14 (SwiftUI) Sheet Modals not dismissing and acting randomly weird
I finally came to a solution. I managed to detect where the issue came from, or at least, what was causing the weird modal behaviour. To be honest, I solved the issue but I am still not understanding why this is causing such an issue. I still don't see the relationship between, and moreover, this was something not happening in iOS13, so... In any case, let me give you two examples of the very same app, one reproducing the issue and the other one without the issue. App 1: No issue in iOS13 but weird modal behaviour in iOS14 First let me write the MainView and the ModalView: // a simple tabview with just one tab with a simple button opening the modal struct MainView: View {     @State var showNewSuitModal = false     var body: some View {         TabView {             Button(action: {                 self.showNewSuitModal = true             }) {                 ZStack {                     Circle()                         .foregroundColor(Color.white)                         .frame(width: 40, height: 40)                         .shadow(radius: 5)                         .opacity(0.5)                     Image(systemName: "plus")                         .resizable()                         .frame(width: 20, height: 20)                         .foregroundColor(Color.black)                     }             }             .foregroundColor(Color.white)             .padding(.bottom,20)             .padding(.trailing,10)             .sheet(isPresented: $showNewSuitModal) { // <-- the modal acting weird                 ModalView(isPresented: self.$showNewSuitModal)             }             .tabItem({  &#9;&#9;&#9;Image(systemName: "gauge")                 Text("Tab").fontWeight(.ultraLight)             })         }         .navigationBarBackButtonHidden(true)         .navigationBarTitle("")     } } // A simple modal with just a closing/dismissing button struct ModalView: View {     @Binding var isPresented: Bool     var body: some View {         Button(action: {             self.isPresented = false         }) {             ZStack {                 Circle()                     .foregroundColor(Color.white)                     .frame(width: 40, height: 40)                     .shadow(radius: 5)                     .opacity(0.5)                 Image(systemName: "minus")                     .resizable()                     .frame(width: 20, height: 20)                     .foregroundColor(Color.black)                 }         }         .foregroundColor(Color.white)         .padding(.bottom,20)         .padding(.trailing,10)     } } And now the LaunchView, where the actual issue was detected: // The launching view including just a "next" button which is linking us to // the MainView (the purpose of this first view is to show a disclaimer app) struct LaunchView: View {      var body: some View {          NavigationView {              NavigationLink(destination: MainView()) {                  HStack (alignment: .center) {                      HStack {                          Image(systemName: "play")                              .font(.system(size: 16))                          Text("Next")                              .fontWeight(.semibold)                              .font(.system(size: 16))                      }                      .padding()                      .foregroundColor(.white)                      .background(Color.red)                      .cornerRadius(40)                      .shadow(radius: 5)                 }                 .padding()              }              .navigationBarTitle("Test App")          }          .navigationViewStyle(StackNavigationViewStyle())      }  } This app is the one having issues, and all the issues come from the fact that the LaunchView is using a NavigationLink to jump to the next view. Let's rewrite the app in another way so the NavigationLink is not used. App 2: Issue solved (as far it seems for now) MainView and ModalView are exactly the same than in App 1. LaunchView is as follows: struct LaunchView: View {     @State var disclaimerView = true     var body: some View {         NavigationView {             VStack {                 if self.disclaimerView {                     DisclaimerView(buttonClick: $disclaimerView)                 } else {                     MainView()                 }             }             .navigationBarTitle("Test App")         }         .navigationViewStyle(StackNavigationViewStyle())     } } struct DisclaimerView: View {     @Binding var buttonClick: Bool     var body: some View {         VStack {             Button(action: {                 self.buttonClick.toggle()             }) {                 HStack {                     Image(systemName: "play")                         .font(.system(size: 16))                     Text("Next")                         .fontWeight(.semibold)                         .font(.system(size: 16))                 }             }             .padding()             .foregroundColor(.white)             .background(Color.red)             .cornerRadius(40)             .shadow(radius: 5)         }     } } With this approach, which is basically not using the NavigationLink in my root View, the modals started to act as they should. I can't see why but I hope it helps others.
Oct ’20