#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 {
// ...
}
}
}
}