(アーカイブ)【SwiftUI】編集モードの取得に関する不具合

本記事で使用している.navigationBarItems()モディファイアはiOS14以降では非推奨となっています。
最新の情報はこちらの記事を御覧ください。

編集モード(editMode)の取得に関する不具合と思われる現象に遭遇したので、対処方法と一緒に記録を残しておきます。

スポンサーリンク

環境

この記事の情報は次のバージョンで動作確認しています。

【Xcode】11.4.1
【Swift】5.2
【iOS】13.4.1
【macOS】Catalina バージョン 10.15.4
スポンサーリンク

ケース1

環境変数のeditModeを参照し、Editボタンが押されたら、Text表示が切り替わるサンプルソースです。

Editボタンが押されると、表示が切り替わります。
これは想定通りの動きです。

ケース1

シミュレーターと実機では動きますが、Xcodeのプレビューではなぜか動きませんでした。
スポンサーリンク

ケース2

ケース1と同じ機能をNavigationViewを使って再現します。
Editボタンは、NavigationBarに配置します。

こちらはEditボタンが押されても表示が切り替わりません。

ケース2

スポンサーリンク

原因と対処方法

原因はわかりませんが、いろいろと検証したところ、「NavigationViewのクロージャー内で、編集モードの取得ができない」ようです。
(※NavigationViewだけでなく、Formでも同様の現象が発生します。)

対処としては、Viewを分割して編集モードを参照する処理とNavigationViewの記述を分けると問題を回避できます。

Editボタンが押されると、表示が切り替わるようになりました。

原因と対処方法

こちらのケースはプレビューでも正しく動きました。
スポンサーリンク

あわせて読みたい記事

【SwiftUI】Viewの編集モード(editMode)について
(2020/11/03 更新) Viewの編集モードについて解説します。
【SwiftUI】Viewの分割
(2020/03/10 更新) 複雑なViewを小さなViewに分割する事で、繰り返しを避け、ソースを見やすくする方法を紹介します。 Viewを分割してもパフォーマンスに大きな影響を及ぼさないのがSwiftUIの特徴の一つです。
【SwiftUI】Listの行削除
(2021/09/26 更新) Listで生成したデータ一覧の行削除処理について解説します。