スクロールビューで目的地ビューにつながるナビゲーションビューを作成しようとしています。目的地ビューのナビゲーションタイトルは、インライン表示モードに向かってアニメーション化するか、少なくともナビゲーションバー自体の後ろでスクロールします。
基本的に、私は標準のミュージックアプリの動作を再現しようとしています。特に、ライブラリからソングに移行するときです。
そこには、スクロール時にインライン表示モードにアニメーション化される独自のタイトルを持つソースビュー(ライブラリ)があります。曲をタップすると、新しいタイトル(曲)のリストも表示され、スクロールするとインライン表示モードになります。
だから私はNavigationBarTitleでメインのNavigationViewを持っています。独自のNavigationBarTitleとコンテンツの長いリストを含むdestinationViewに移動します。スクロールすると、メインナビゲーションビューのNavigationBarTitleはインライン表示モードに変わりますが、宛先ビューのNavigationBarは非常に奇妙な動作をします。これは基本的に、背景とアニメーションのないオーバーレイです。
また、宛先ビューのNavigationBarTitleをすべて一緒に削除すると、状況が悪化するだけです。何も入っていない別の透明なNavigationBarを追加するようです。
また、ナビゲーションバーに背景を追加しようとしましたが、ドキュメントを見回しましたが、解決策が見つかりませんでした。
私が何か間違っているのか、それともSwiftUIまたはXcodeの単なるベータバグなのかはわかりません。
import UIKit
struct ContentView: View {
var body: some View {
NavigationView{
List(0..<20) { item in
NavigationLink(destination: DetailedView()) {
Text("Next view")
}
}
.navigationBarTitle("Source View")
}
}
}
struct DetailedView: View {
var body: some View {
List(0...25) { number in
Text("This is \(number)'th row")
}
.navigationBarTitle(Text("Destination View"))
// comment out line above to see empty frame of navigation bar
}
}
これは、iOS 13.1パブリックリリース(Xcode 11のApp Storeリリース)で修正されています。
私は現在ベータ5を使用していますが、これはSwiftUIの継続的なバグだと思います。
SwiftUIランドマークチュートリアルを実行しているときに同じ問題に気づき、問題を簡単に再現できます。 https://imgur.com/a/aYgUUH
今のところ、すべてのコンテンツスクロールが透明なnavBarの下に表示されないようにするため、inline
とautomatic
に問題が発生したため、すべてのNavbarをlarge
として表示するように変換しました。
List {
// ...
}
.navigationBarTitle(Text("MyTitle"), displayMode: .inline)