Мне нужно сделать другой макет для iPad в альбомной и книжной ориентациях, но классы размеров на iPad всегда обычные/обычные. Рекомендуемый Apple способ адаптации интерфейсов — использование адаптивного макета с классами размера, но на iPad нет разницы между портретным и альбомным режимами.
Есть ли способ представить разные макеты в портретной и альбомной ориентации на iPad без определения ориентации устройства?
Например, на iPhone (компактный/обычный) будет отображаться как:
А на iPad в альбомной ориентации (обычный/обычный) будет отображаться как:
Итак, цель — показать макет iPhone на iPad в портретном режиме.
Спасибо!
Вы можете принудительно применить класс горизонтального размера в зависимости от ориентации. Если я правильно понял вашу цель, вот демонстрация возможного подхода (проверено с помощью 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)
}
}
Apple рекомендует одинаковую раскладку как для книжной, так и для альбомной ориентации на iPad.