#ipad #swiftui #landscape #size-classes #portrait
#iPad #swiftui #пейзаж #классы размеров #портрет
Вопрос:
Мне нужно сделать другой макет для iPad в альбомной и портретной ориентации, но классы размеров на iPad всегда обычные / регулярные. Рекомендуемый Apple способ адаптации интерфейсов — использовать адаптивную компоновку с классами размеров, но на iPad нет разницы между портретным и альбомным режимами.
Есть ли какой-либо способ представить другой макет в книжной и альбомной ориентации на iPad без ориентации устройства обнаружения?
В качестве примера, на iPhone (компактный / обычный) будет отображаться как:
А на iPad в альбомной ориентации (обычный / обычный) будет отображаться как:
Итак, цель состоит в том, чтобы показать макет iPhone на iPad в портретном режиме.
Спасибо!
Комментарии:
1. Apple рекомендует одинаковую раскладку как для портретной, так и для альбомной ориентации на iPad
Ответ №1:
Вы можете принудительно применить класс горизонтального размера в зависимости от ориентации. Если я правильно понял вашу цель, вот демонстрация возможного подхода (протестирована с Xcode 12.1 / iOS 14.1):
struct DemoViewSizes: View {
@Environment(.horizontalSizeClass) var horizontalSizeClass
@State private var orientation = UIDevice.current.orientation
var body: some View {
Text("root_view_here")
.onReceive(NotificationCenter.default.publisher(for: UIDevice.orientationDidChangeNotification)) { _ in
orientation = UIDevice.current.orientation
}
.environment(.horizontalSizeClass, orientation == .portrait ? .compact : .regular)
}
}