SwiftUI_Navigation_On_Off

こんにちは EveryDaySoft代表の永田です。 最近もリモートでSwiftUIやKotlinの業務を実施しています。また1日数キロのウォーキングも実施していて、暑い夏に備える体力づくりも実施しています。

今回はこちら。

https://twitter.com/dbank0208/status/1271181338737930240?s=20

SwiftUIでNavigationの表示、非表示を実現しました。

どうやっているか。

Extension Method のisHidden Methodを使用します。

Viewに紐づく、contentには、スーパークラスで、hidden() Methodという、 Viewを隠すプログラムがあります。こちらを使用して、On/Off

extension View {

     /// Hides this view.
     ///
     /// Hidden views are invisible and can't receive or respond to
     /// interactions.
     ///
     /// Returns: A view that hides this view.
     @inlinable public func hidden() -> some View
 }

HiddenModifierには、呼び出された時点で、呼び出し元のViewをロジックでOn/Off判定後、引数で戻すようにしています。

extension Viewなので、 SwiftUIのstruct内bodyの中ではViewの拡張関数が使用できますので、.isHidden(true)のようにしてます。

extension View {
     func isHidden(_ bool: Bool) -> some View {
         modifier(HiddenModifier(isHidden: bool))
     }
 }


private struct HiddenModifier: ViewModifier {
 
     fileprivate let isHidden: Bool
 
     fileprivate func body(content: Content) -> some View {
         Group {
             if isHidden {
                 content.hidden()
             } else {
                 content
             }
         }
     }
 }

仕様側のプログラム 1番の目のTabを押下した場合にself.viewRouter.naviModel.isHiddenFlgがbindしつつOn/offに切り替わり、上記の挙動を実現しています。

isHidden(self.viewRouter.naviModel.isHiddenFlg)

ソースコードはこちらです。

https://github.com/daisukenagata/SwiftUI_CustomModifier

SwiftUIで、世の中にほとんどないロジックを作成しています。実現するために作成しました。宜しければ、使ってみてください。

以上、貴重なお時間お読み下さいまして、誠にありがとうございます。