私は(ほとんどの人と同じように)SwiftUI の初心者で、に埋め込んだ の上の空白を削除する方法を考えています。List
NavigationView
この画像では、 の上に白いスペースがあることがわかりますList
。
私が達成したいのはこれです:
以下を試してみました:
.navigationBarHidden(true)
しかし、目立った変化はありませんでした。
現在、navigiationView を次のように設定しています。
NavigationView {
FileBrowserView(jsonFromCall: URLRetrieve(URLtoFetch: applicationDelegate.apiURL))
.navigationBarHidden(true)
}
ここで、およびs が次のように定義された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: "")
}
}
ここでの最終的な目標は、これらのセルをクリックしてファイル ツリーのより深いところまで移動できるようにし、より深いところまで移動するときにバーに [戻る] ボタンを表示することですが、最初の表示では上部にそのようなものは表示したくないことに注意してください。
ベストアンサー1
何らかの理由で、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
前にも言ったように、これはハッキーな解決策ですが、Apple からの公式な解決策がないので、これが私が思いついた最善の方法です。