В этом руководстве мы узнаем, как использовать Forms в SwiftUI. Что касается Форм, мы также рассмотрим их ограничения, использование и то, как мы можем использовать их с Section и Group для достижения желаемого пользовательского интерфейса.

Формы представляют собой прокручиваемый список статических элементов управления, таких как текст и изображения, а также пользовательские интерактивные элементы управления, такие как текстовые поля, переключатели переключатели, кнопки и т. д.

Вы можете создать базовую форму, просто обернув текстовое представление по умолчанию внутри формы следующим образом:

var body: some View {
        Form {
            Text("Hello, world!")
        }
    }

Вы можете добавить в форму столько элементов, сколько хотите, хотя, если вы собираетесь добавить более 10, вам необходимо добавить Группу, чтобы избежать ошибок.

Примечание. Мы можем добавить только 10 дочерних представлений в родительский. Это применимо везде в SwiftUI. Это ограничение SwiftUI.

Чтобы преодолеть ограничение, мы можем использовать 2 варианта.

  1. Группа (на самом деле это не меняет внешний вид вашего пользовательского интерфейса)
  2. Раздел (разделение элементов на куски)

Хватит теории. Вы узнаете больше, когда будете реализовывать это на практике.

Вот пользовательский интерфейс, который мы собираемся реализовать. Он похож на экран настроек с небольшим содержанием профиля.

Итак, в этой первой части мы собираемся реализовать только пользовательский интерфейс. В следующей части мы добавим средство выбора для выбора параметров сравнения при щелчке по ячейкам сравнения.

Для первого раздела мы будем использовать Группу. В нем мы будем использовать HStack и VStack, чтобы настроить пользовательский интерфейс в соответствии с требованиями.

HStack: Представление, которое упорядочивает свои подпредставления по горизонтальной линии.

VStack: представление, в котором его подпредставления расположены вертикально.

И добавьте строки в разделы в соответствии с требуемым дизайном. мы можем добиться этого, обернув их в HStack [он будет содержать изображение/текст/переключатель/выборщик в соответствии с нашим требованием]

вот полный вид контента

struct ContentView: View {
    
    @State var isDarkModeEnabled: Bool = true
    @State var downloadViaWifiEnabled: Bool = false
    
    var body: some View {
        NavigationView {
            Form {
                Group {
                    HStack{
                        Spacer()
                        VStack {
                            Image(uiImage: UIImage(named: "UserProfile")!)
                                .resizable()
                                .frame(width:100, height: 100, alignment: .center)
                            Text("Wolf Knight")
                                .font(.title)
                            Text("[email protected]")
                                .font(.subheadline)
                                .foregroundColor(.gray)
                            Spacer()
                            Button(action: {
                                print("Edit Profile tapped")
                            }) {
                                Text("Edit Profile")
                                    .frame(minWidth: 0, maxWidth: .infinity)
                                    .font(.system(size: 18))
                                    .padding()
                                    .foregroundColor(.white)
                                    .overlay(
                                        RoundedRectangle(cornerRadius: 25)
                                            .stroke(Color.white, lineWidth: 2)
                                    )
                            }
                            .background(Color.blue)
                            .cornerRadius(25)
                        }
                        Spacer()
                    }
                }
                
                Section(header: Text("CONTENT"), content: {
                    HStack{
                        Image(uiImage: UIImage(named: "Favorite")!)
                        Text("Favorites")
                    }

                    HStack{
                        Image(uiImage: UIImage(named: "Download")!)
                        Text("Downloads")
                    }

                })

                Section(header: Text("PREFRENCES"), content: {
                    HStack{
                        Image(uiImage: UIImage(named: "Language")!)
                        Text("Language")
                    }
                    HStack{
                        Image(uiImage: UIImage(named: "DarkMode")!)
                        Toggle(isOn: $isDarkModeEnabled) {
                            Text("Dark Mode")
                        }
                    }
                    HStack{
                        Image(uiImage: UIImage(named: "DownloadViaWifi")!)
                        Toggle(isOn: $downloadViaWifiEnabled) {
                            Text("Only Download via Wi-Fi")
                        }
                    }
                    HStack{
                        Image(uiImage: UIImage(named: "PlayInBackground")!)
                        Text("Play in Background")
                    }

                })
            }
            .navigationBarTitle("Settings")
        }
        
    }
}

Вот и все. В следующей части мы узнаем больше о привязках с Toggle и Picker, чтобы сделать экран настроек интерактивным.

Вторая часть здесь: