web-dev-qa-db-ja.com

SwiftUIリスト/フォームのスクロールを無効にする

最近、フォームの下のピッカーを使用できるようにする複雑なビューの作成に取り組んでいます。いずれの場合も、フォームには2つのオプションしかないため、下にスクロールしてさらにデータを表示するのに十分なデータはありません。このフォームをスクロールできるが、下のピッカーはスクロールできないため、ビューの表示が悪くなります。フォーム内にピッカーを配置できないか、SwiftUIがピッカーのスタイルを変更します。そして、私は使用せずにリスト/フォームのスクロールを無効にすることが可能であるかどうかをどこにも見つけることができません:

.disable(condition)

上記のステートメントを使用せずにリストまたはフォームのスクロールを無効にする方法はありますか?これが参考のための私のコードです

VStack{
        Form {
            Section{
                Toggle(isOn: $uNotifs.notificationsEnabled) {
                    Text("Notifications")
                }
            }
            if(uNotifs.notificationsEnabled){
                Section {
                    Toggle(isOn: $uNotifs.smartNotifications) {
                        Text("Enable Smart Notifications")
                    }
                }.animation(.easeInOut)
            }
       } // End Form
            .listStyle(GroupedListStyle())
            .environment(\.horizontalSizeClass, .regular)
        if(!uNotifs.smartNotifications){
                GeometryReader{geometry in
                    HStack{
                        Picker("",selection: self.$hours){
                            ForEach(0..<24){
                                Text("\($0)").tag($0)
                            }

                        }
                            .pickerStyle(WheelPickerStyle())
                            .frame(width:geometry.size.width / CGFloat(5))
                            .clipped()
                        Text("hours")
                        Picker("",selection: self.$min){
                            ForEach(0..<61){
                                Text("\($0)").tag($0)
                            }

                        }
                            .pickerStyle(WheelPickerStyle())
                            .frame(width:geometry.size.width / CGFloat(5))
                            .clipped()
                        Text("min")
                    }
3
Jacob Miller

ここにあります

demo

私の投稿のアプローチ SwiftUI:プログラムでリストをスクロールする方法[ソリューション]? を使用すると、次の拡張機能を追加できます

extension ListScrollingProxy {
    func disableScrolling(_ flag: Bool) {
        scrollView?.isScrollEnabled = !flag
    }
}

上記のデモの例のように使用します

struct DemoDisablingScrolling: View {
    private let scrollingProxy = ListScrollingProxy()

    @State var scrollingDisabled = false
    var body: some View {
        VStack {
            Button("Scrolling \(scrollingDisabled ? "Off" : "On")") {
                self.scrollingDisabled.toggle()
                self.scrollingProxy.disableScrolling(self.scrollingDisabled)
            }
            Divider()
            List(0..<50, id: \.self) { i in
                Text("Item \(i)")
                    .background(ListScrollingHelper(proxy: self.scrollingProxy))
            }
        }

    }
}
3
Asperi