ピッカーをクリックすると、選択ビューに移動します。アイテムリストが上部からレンダリングされすぎていますが、アニメーションが終了するとスナップします。なんでこんなことが起こっているの?
デモ: https://gfycat.com/idioticdizzyazurevase
ナビゲーションバーのタイトルとボタン、フォームセクション、およびその他の詳細を除外するための最小限の例を既に作成しました。
import SwiftUI
struct NewProjectView: View {
@State var name = ""
var body: some View {
NavigationView {
Form {
Picker("Client", selection: $name) {
Text("Client 1")
Text("Client 2")
}
}
}
}
}
struct NewProjectView_Previews: PreviewProvider {
static var previews: some View {
NewProjectView()
}
}
これは、プレビューモード、シミュレーター、およびデバイスで発生します(Xcode 11.2、シミュレーターではiOS 13.2、デバイスでは13.3ベータ1)。
ナビゲーションビューのスタイルを強制的に積み重ねると、明らかにバグのある動作を回避できます。
NavigationView {
…
}.navigationViewStyle(StackNavigationViewStyle())
これは私の問題の解決策ですが、これは(まだ)受け入れられた回答としてマークしません。
このバグが解決されるまで、iPadのDoubleColumnNavigationViewStyleを保持しながらこの問題を回避する別の方法は、条件付きでそのスタイルを設定することです。
let navView = NavigationView {
…
}
if UIDevice.current.userInterfaceIdiom == .pad {
return AnyView(navView.navigationViewStyle(DoubleColumnNavigationViewStyle()))
} else {
return AnyView(navView.navigationViewStyle(StackNavigationViewStyle()))
}
私の意見では、ナビゲーションバーと関係があります。デフォルトでは(_.navigationBarTitle
_拡張の言及なし)、ナビゲーション表示モードは_.automatic
_に設定されています。これは_.inline
_に修正する必要があります。私はこれに似た別の投稿を見つけ、.navigationBarTitle("", displayMode: .inline)
を使用することで、あなたの投稿と組み合わせるためにそれらのソリューションを使用することが役立つはずです。
_import SwiftUI
struct NewProjectView: View {
@State var name = ""
var body: some View {
NavigationView {
Form {
Picker("Client", selection: $name) {
Text("Client 1")
Text("Client 2")
}
}
.navigationBarTitle("", displayMode: .inline)
}
}
}
struct NewProjectView_Previews: PreviewProvider {
static var previews: some View {
NewProjectView()
}
}
_