SwiftUI - iOS14 sheetとfullScreenを機能しないバグの対処法
内容
iOS14.4以下の場合、sheetを複数やsheet + fullScreen を設定すると正常に動作しない事例が発生するみたいです。
そのため、EmptyViewに対してfullScreenを設定し回避するも、iOS15以降の場合はEmptyViewに対して設定されたイベントが発火しないなどの問題があるようです。
他の記事を見ると、iOS14とiOS15で処理を分けて対処しているのが多いと思いますがコードの肥大化を避けるためにもっと簡潔にやりたい。。。
解決法
iOS15では、EmptyViewに対して設定されたイベントが機能しないなら、他のViewにしてしまえぇと言うことで、Spacer().frame(width:0, height:0)に設定することで機能することが確認できました。
iOS14.4以下で機能しないコード
Button(action: {
isPresentedSheet.toggle()
}{
Text("ボタン")
}.sheet(isPresented: $isPresentedSheet) {
//処理
}
.fullScreenCover(isPresented: $isPresentedfullScreen) {
//処理
}
機能するコード
Button(action: {
isPresentedSheet.toggle()
}{
Text("ボタン")
}.sheet(isPresented: $isPresentedSheet) {
//処理
}
Spacer()
.frame(width: 0, height: 0)
.fullScreenCover(isPresented: $isPresentedfullScreen) {
//処理
}