如何更改 SwiftUI 中的 PickerStyle,如 Embed in Form,但静态且不可滚动?

Posted

技术标签:

【中文标题】如何更改 SwiftUI 中的 PickerStyle,如 Embed in Form,但静态且不可滚动?【英文标题】:How can I change the PickerStyle in SwiftUI like Embed in Form, but static and not scrollable? 【发布时间】:2019-08-13 15:05:03 【问题描述】:

我希望有一个参与表单的选择器。。它应该看起来像一个导航链接。这个问题是,如果我将它编程为一个表单,那么它是可滚动的,我不希望这样。我希望它是静态的,或者有人知道如何使表单成为静态而不是可滚动的解决方案。

【问题讨论】:

你应该添加图片和/或代码 你看到 topside 是选择器,而机器人端是一个自创的“Picker”,如导航链接。顶部你可以上下滑动它,这个功能我不想要。我希望它像机器人端一样,这是固定在定位 imgur.com/12QCu3U 我在 beta 6 上遇到了同样的滚动问题。对我来说,它看起来像一个错误。您可以随时向 Apple 报告。 【参考方案1】:

XCode 11 Beta 6

@Daniel Ryan 我现在编写了自己的方法,效果很好。

import SwiftUI

var AnArrays : [String] =  [  "eins", "zwei", "drei", "vier", "fünf"]

struct ContentView: View 
     @State var Gepickt : String = ""
     var body : some View 
          NavigationView
               VStack 
                    NavigationLink(destination: AuswahlPick(gewählt: $Gepickt)) 
                         HStack 
                              Text("PickerMaSelf")
                                   .foregroundColor(Color.black)
                              Spacer()
                              Text(Gepickt.count > 0 ? Gepickt : "Pick One ?")  .foregroundColor(Color.gray)
                              Image(systemName: "chevron.right")  .foregroundColor(Color.gray)
                                   .padding(.trailing)
                         
                    
               
          
     


struct AuswahlPick: View 
     @Binding var gewählt : String
     @Environment(\.presentationMode) var presentationMode
     var body: some View 
          Form
               ForEach(AnArrays, id: \.self) x in
                    Button(action: 
                         self.gewählt = "\(x)"
                         self.presentationMode.wrappedValue.dismiss()
                    ) 
                         Text("\(x)")
                              .foregroundColor(Color.black)
                    
               
          
     


#if DEBUG
struct ContentView_Previews: PreviewProvider 
     static var previews: some View 
          ContentView()
     

#endif

【讨论】:

【参考方案2】:

这是对应的修饰符:

.pickerStyle()

例如这段代码:

struct ContentView : View 
    var strengths = ["Mild", "Medium", "Mature"]

    @State var selectedStrength = 0

    var body: some View 
        NavigationView 
            Form 
                Section 
                    Picker(selection: $selectedStrength, label: Text("Strength")) 
                        ForEach(0 ..< strengths.count) 
                            Text(self.strengths[$0]).tag($0)
                        
                    
                .pickerStyle(.default)
            .navigationBarTitle(Text("Select your cheese"))

        
    

它就像嵌入在表单中,但您可以使用.pickerStyle(.wheel) 使其看起来像列表中的原始选择器。

但是由于您的问题不够清楚,我认为默认实际上就是您要的。

【讨论】:

是的,但这是我不想要的!这是滚动条。我不想要这个滚动动作。 我想要一个像 Forms 中的选择器样式。我的问题是,表单有一个滚动功能,这个滚动功能想要禁用它。 请添加一些图片using this site 并将链接放在问题中。我真的不明白你。 你看到 topside 是选择器,而机器人端是一个自创的“Picker”,如导航链接。顶部你可以上下滑动它,这个功能我不想要。我希望它像机器人端一样,这是固定在定位 imgur.com/12QCu3U 为什么选择器样式修饰符被应用于部分而不是选择器?如果一个部分中有多个选择器怎么办?

以上是关于如何更改 SwiftUI 中的 PickerStyle,如 Embed in Form,但静态且不可滚动?的主要内容,如果未能解决你的问题,请参考以下文章

如何根据 SwiftUI 中的 @State 更改导航视图的导航视图样式?

如何更改 SwiftUI 和 iOS 14 中的单元格背景颜色?

使用 NavigationView 和 List 时如何更改 SwiftUI 中的背景颜色?

如何更改 SwiftUI 中的 PickerStyle,如 Embed in Form,但静态且不可滚动?

值更改时如何在 UIKit 中更新 SwiftUI 视图?

SwiftUI 2.0如何更改表单部分的背景颜色[重复]