单击选取器后,它将导航到选择视图。项目列表被渲染到离顶部太远的地方,但在动画完成后会被捕捉。为什么会发生这种情况?
演示: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()
}
}这发生在预览模式、模拟器和设备上(Xcode11.2,模拟器中的iOS 13.2,设备上的13.3Beta1)。
发布于 2019-11-22 03:20:38
当强制导航视图样式堆叠时,可以解决明显存在错误的行为:
NavigationView {
…
}.navigationViewStyle(StackNavigationViewStyle())这是我的问题的一个解决方案,但我(目前)不会将其标记为可接受的答案。
如果你需要另一个导航视图style.
这似乎是一个错误,即使它可能是由特殊的circumstances.
发布于 2020-01-03 15:32:52
在我看来,这与导航栏有关。默认情况下(未提及.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()
}
}发布于 2019-12-11 02:59:59
在解决此错误之前,在保留iPads的DoubleColumnNavigationViewStyle的同时解决此问题的另一种方法是有条件地设置该样式:
let navView = NavigationView {
…
}
if UIDevice.current.userInterfaceIdiom == .pad {
return AnyView(navView.navigationViewStyle(DoubleColumnNavigationViewStyle()))
} else {
return AnyView(navView.navigationViewStyle(StackNavigationViewStyle()))
}https://stackoverflow.com/questions/58773687
复制相似问题