【SwiftUI】toolbar(bottomBar)が空白として残る場合の対処法(暫定)

SwiftUI

SwiftUIのtoolbarは基本的に画面遷移すると消えるのですが、
NavigationLinkで遷移してもtoolbarのスペースが空白として残るケースに遭遇しました。

直接的な原因と解決法が分からなかった為、暫定的な解決方法を紹介します。

問題が起こりうるコード

解決方法の提示の為の構成の紹介であり該当コードで問題が起こりうるとは限りません。

※Itemについてはクラスや構造体を定義し、配列にして使っているという想定です

List{
    ForEach(self.items){ item in
        NavigationLink(item.name){
            ItemView(item:item)
        }
    }
}
.toolbar{
    ToolbarItem(placement: .bottomBar){
        BottomBarView()
    }
}

暫定的な解決法

画面遷移が起きた際に非表示にすることで対応します。

@SceneStorageを使用して画面の遷移状況を取得し、遷移前であるnilの場合のみtoolbarを表示します

@SceneStorage("SelectedItem") var selectedItem:String?

List{
    ForEach(self.items){ item in
        NavigationLink(
            destination: ItemView(item:item),
            tag: item:item.uuid?.uuidString ?? "NoUUID",
            selection: self.$selectedItem){

           Text(item.name)
        }
    }
}
.toolbar{
    ToolbarItem(placement: .bottomBar){
        if selectedItem == nil {
            BottomBarView()
        }
    }
}

NavigationLinkをこの様に変更する事で、画面遷移状態がSceneStorageに保持されます。
今回は各ItemにUUIDを振って、その値の文字列を使用する様にしています。
これで遷移後は文字列が入っているのでBottomBarViewは表示されず、
遷移前のみnilが入っているのでBottomBarViewが表示されます。

toolbar Modifier自体にはそのままではifが使えないのでToolbarItemは残りますが、
中身のViewが無いと表示されなくなる為このままで構いません。

コメント

タイトルとURLをコピーしました