こんにちは EveryDaySoft代表の永田です。 最近もリモートでSwiftUIやKotlinの業務を実施しています。また1日数キロのウォーキングも実施していて、暑い夏に備える体力づくりも実施しています。
今回はこちら。
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で、世の中にほとんどないロジックを作成しています。実現するために作成しました。宜しければ、使ってみてください。
以上、貴重なお時間お読み下さいまして、誠にありがとうございます。
コメントを残す