单击选择器后,它将导航到选择视图。项目列表的渲染距离顶部太远,但是在动画结束后会迅速对齐。为什么会这样?
演示: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 beta 1)。
答案 0 :(得分:3)
我认为,这与导航栏有关。默认情况下(不提及.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()
}
}
答案 1 :(得分:2)
强制将导航视图样式堆叠时,可以解决明显的错误行为:
NavigationView {
…
}.navigationViewStyle(StackNavigationViewStyle())
这是解决我的问题的方法,但我不会将其标记为已接受的答案。
答案 2 :(得分:1)
谢谢大家的关注!确实帮助我了解了更多东西,并解决了我的问题之一。与其他人共享时,我遇到了这个问题,但是当我将一个节设置为出现在具有切换的节上的if / else语句中时,我也遇到了这个问题。激活切换后,它将使节标题水平移动几个像素。
以下是我的解决方法
Section(header: Text("Subject Identified").listRowInsets(EdgeInsets()).padding(.leading)) {
Picker(selection: $subIndex, label: Text("Test")) {
ForEach(0 ..< subIdentified.count) {
Text(self.subIdentified[$0]).tag($0)
}
}
.labelsHidden()
.pickerStyle(SegmentedPickerStyle())
我的选择器选择视图上仍存在水平移动,并且不确定如何解决。我创建了另一个线程来接收输入。再次感谢! SwiftUI Shift Picker Text Horizontal
答案 3 :(得分:0)
在解决此错误之前,解决此问题的另一种方法是同时有条件地设置该样式,同时保留iPad的DoubleColumnNavigationViewStyle:
let navView = NavigationView {
…
}
if UIDevice.current.userInterfaceIdiom == .pad {
return AnyView(navView.navigationViewStyle(DoubleColumnNavigationViewStyle()))
} else {
return AnyView(navView.navigationViewStyle(StackNavigationViewStyle()))
}