[解決済み] SwiftUI NavigationViewのデフォルトのナビゲーションバースペースを削除する方法
質問
私はSwiftUIの初心者で(ほとんどの人がそうであるように)、どのようにいくつかの
空白文字
の上にある
List
に埋め込んだものを
NavigationView
.
この画像では
List
.
私が実現したいことは、これです。
を使ってみました。
.navigationBarHidden(true)
が、これでは顕著な変化はありませんでした。
現在、navigiationViewをこのように設定しています。
NavigationView {
FileBrowserView(jsonFromCall: URLRetrieve(URLtoFetch: applicationDelegate.apiURL))
.navigationBarHidden(true)
}
ここで
FileBrowserView
は、ビューに
List
と
FileCell
はこのように定義されています。
List {
Section(header: Text("Root")) {
FileCell(name: "Test", fileType: "JPG",fileDesc: "Test number 1")
FileCell(name: "Test 2", fileType: "txt",fileDesc: "Test number 2")
FileCell(name: "test3", fileType: "fasta", fileDesc: "")
}
}
最終的な目標は、これらのセルをクリックしてファイル ツリーの奥深くまで移動できるようにすることであり、したがって、より深いナビゲーションでバーに戻るボタンを表示する必要があります。
解決方法は?
なぜか、SwiftUIでは、この他に
.navigationBarTitle
に対して
.navigationBarHidden
が正しく動作するようにします。
NavigationView {
FileBrowserView(jsonFromCall: URLRetrieve(URLtoFetch: applicationDelegate.apiURL))
.navigationBarTitle("")
.navigationBarHidden(true)
}
更新情報
コメントで @Peacemoon さんが指摘したように、ナビゲーションバーは、ナビゲーションスタックの奥に移動すると
navigationBarHidden
から
false
を表示させることができます。コメントで述べたように、これはApple側の実装が悪いのか、単にドキュメントがひどいのかのどちらかです(もしかしたら、これを達成するための "正しい"方法があるのかもしれませんね)。
いずれにせよ、元の投稿者が望む結果をもたらすと思われる回避策を思いつきました。しかし、ナビゲーションバーを隠したり消したりする簡単な方法がないため、これが私にできる最善の方法です。
この例では、3つのビューを使用しています。
View1
はナビゲーションバーが隠されており
View2
と
View3
は、どちらもタイトルが表示されたナビゲーションバーがあります。
struct View1: View {
@State var isNavigationBarHidden: Bool = true
var body: some View {
NavigationView {
ZStack {
Color.red
NavigationLink("View 2", destination: View2(isNavigationBarHidden: self.$isNavigationBarHidden))
}
.navigationBarTitle("Hidden Title")
.navigationBarHidden(self.isNavigationBarHidden)
.onAppear {
self.isNavigationBarHidden = true
}
}
}
}
struct View2: View {
@Binding var isNavigationBarHidden: Bool
var body: some View {
ZStack {
Color.green
NavigationLink("View 3", destination: View3())
}
.navigationBarTitle("Visible Title 1")
.onAppear {
self.isNavigationBarHidden = false
}
}
}
struct View3: View {
var body: some View {
Color.blue
.navigationBarTitle("Visible Title 2")
}
}
設定
navigationBarHidden
から
false
を設定したビューの環境設定を正しくオーバーライドしないようです。
navigationBarHidden
を
true
というわけで、唯一の回避策は、新しいビューがナビゲーションスタックにプッシュされたときに、元のビューのプリファレンスを変更するためのバインディングを使用することでした。
しかし、アップルからの公式な解決策がない以上、これが私が思いついた最善の方法です。
関連
-
IOSラーニングノート「このクラスはxxxのキーバリューコーディングに対応していません」問題解決
-
[解決済み] キーボードがあるときに、UITextFieldを編集開始時に上に移動させるには?
-
[解決済み] UITableViewの選択を無効にするにはどうすればよいですか?
-
[解決済み] iOSのステータスバーの文字色を変更する方法
-
[解決済み] UITextViewのサイズをコンテンツに合わせるには?
-
[解決済み] コードサインエラーです。期限切れのプロファイルを削除した後、プロビジョニングプロファイルが見つからない
-
[解決済み] SwiftでiOSキーボードを任意の場所でタッチして閉じる
-
[解決済み] UIViewの角丸とドロップシャドウ?
-
[解決済み] Swift で HTTP リクエストを行うにはどうしたらいいですか?
-
[解決済み] Swiftのプロトコルでオプションのメソッドを定義するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Xcode 6.3 - 現在の iOS Development 証明書または保留中の証明書要求がすでにあります。
-
[解決済み] 文字列の長さを取得する
-
[解決済み] SwiftでStringを配列に分割する?
-
[解決済み] UITextViewのプレースホルダー
-
[解決済み] Swift 3, 4, 5 で dispatch_after GCD を書くにはどうしたらいいですか?
-
[解決済み] iOS 7でステータスバーとナビゲーションバーがビューの境界を越えて表示される
-
[解決済み] NSNotificationCenterのaddObserver in Swift
-
[解決済み] UITextFieldのテキストインセット?
-
[解決済み] セキュリティで保護されたWebサービスにもアクセスするiOSアプリで、Facebook認証を行うためのデザイン
-
[解決済み] iOSアプリをApple Developer Programや脱獄せずにデバイス上でテストすることができます。