Как я могу установить портретный режим для iPhone и для iPad в портретной и альбомной ориентации?

#swift #swiftui

#swift #swiftui

Вопрос:

Я новичок в SwiftUI. Мой вопрос в том, что когда user запускает приложение с iPhone, они могут использовать приложение только в портретном режиме. Если пользователь запускает приложение с iPad, должна быть возможность использовать приложение в портретном и альбомном режимах. Я думаю, что мне нужно UIDevice.current.model , но как я могу это реализовать?

 import SwiftUI
import UIKit

struct ContentView: View {
    @State var value_2 = 1
    @State var show_1 = false
    
    var body: some View {
        VStack {
            Button(action: {
                self.show_1.toggle()
            }) {
                    Text("Push")
                }
            .sheet(isPresented: $show_1) {
                Sheet(show_0: self.$show_1, value_1: self.$value_2)
            }
        }
    }
}

struct Sheet: View {
    @Binding var show_0: Bool
    @Binding var value_1: Int
    
    var body: some View {
        NavigationView {
            number(value_0: $value_1)
                .navigationBarTitle(Text("Enter number"), displayMode: .inline)
                .navigationBarItems(trailing: Button(action: {
                    self.show_0 = false
                }) {
                    Text("Done").bold()
            })
        }.navigationViewStyle(StackNavigationViewStyle())
    }
}

struct number: View {
    @Binding var value_0: Int
    
    var body: some View {
        Section {
            Text("Headline")
            Picker("",selection: $value_0)
                    {
                        ForEach(1..<101) { value in
                            Text("(value)")
                }
            }
        }
        .labelsHidden()
    }
}
  

Ответ №1:

Вы можете использовать @Environment(.horizontalSizeClass) var sizeClass , как описано здесь: изменение макета представления в соответствии с классами размеров

Это покажет нам, есть ли у нас обычный или компактный размерный класс. Очень грубо:

  • Все iPhone в портретном режиме имеют компактную ширину и обычную высоту.
  • Большинство iPhone в альбомной ориентации имеют компактную ширину и компактную высоту.
  • Большие iPhone (устройства Plus-size и Max) в альбомной ориентации имеют обычную ширину и компактную высоту.
  • Все iPad в обеих ориентациях имеют обычную ширину и обычную высоту.

Вы можете использовать его таким образом:

 struct ContentView: View {
    @Environment(.horizontalSizeClass) var sizeClass

    var body: some View {
        HStack {
            if sizeClass == .compact {
                // compact view
            } else {
                // ...
            }
        }
    }
}