SwiftUI View мерцает при отображении на основе состояния с if-else - PullRequest
0 голосов
/ 06 августа 2020

Я хочу отображать определенную форму в приложении на основе выбранного значения Picker. Однако когда я переключаюсь на сегментированный элемент управления достаточно быстро (здесь это кажется вынужденным, но когда форма более сложная, это очень заметно). Изменить: похоже, это происходит со всеми View s, а не только с формами.

import SwiftUI

struct ContentView: View {
    
    @State private var calculationType = CalculationType.months
    
    @State private var balanceOwned: String = ""
    
    var body: some View {
        VStack {
            Picker("Calculation Type", selection: $calculationType) {
                ForEach(CalculationType.allCases, id: \.self) {
                    Text($0.rawValue.capitalized)
                }
            }.pickerStyle(SegmentedPickerStyle())

            // This check seems to be the cause of the problem!
            if calculationType == .months {
                CustomForm(balanceOwned: $balanceOwned)
            } else if calculationType == .fixed {
                CustomForm(balanceOwned: $balanceOwned)
            } else {
                CustomForm(balanceOwned: $balanceOwned)
            }
        }
    }
}

struct CustomForm: View {
    
    @Binding var balanceOwned: String
    
    var body: some View {
        Form {
            Section {
                TextField("Test", text: $balanceOwned)
                    .foregroundColor(.white)
            }
        }
    }
}

enum CalculationType: String, CaseIterable {
    case months
    case fixed
    case minimum
}

Все, что находится внутри формы, мерцает. Как исправить?

...