Отключить прокрутку в списке / форме SwiftUI - PullRequest
2 голосов
/ 28 марта 2020

В последнее время я работаю над созданием сложного представления, которое позволяет мне использовать средство выбора под формой. В каждом случае форма будет иметь только две опции, поэтому данных недостаточно для прокрутки вниз для получения дополнительных данных. Возможность прокручивать эту форму, но не Пикер ниже, заставляет вид чувствовать себя плохо. Я не могу поместить сборщик внутри формы, иначе 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")
                    }

1 Ответ

0 голосов
/ 29 марта 2020

Вот это

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))
            }
        }

    }
}
...