Класс размера среды не обновлен - PullRequest
0 голосов
/ 11 марта 2020

Я хочу создать различные макеты, используя классы размеров, и я последовал этому примеру: https://www.hackingwithswift.com/quick-start/swiftui/how-to-create-different-layouts-using-size-classes

Я расширил шаблон Xcode Master / Detail и изменил ContentView следующим образом, с помощью два класса размера, а затем с помощью горизонтального класса размера установить заголовок, зависящий от класса размера Проблема в том, что заголовок навигации всегда читается как "Компакт". Что мне здесь не хватает?

struct ContentView: View {
    @Environment(\.managedObjectContext)
    var viewContext   

    @Environment(\.verticalSizeClass) var vSizeClass
    @Environment(\.horizontalSizeClass) var hSizeClass

    var body: some View {
        NavigationView {
            MasterView()
                .navigationBarTitle(Text(hSizeClass == .compact ? "Compact" : "Regular"))
                .navigationBarItems(
                    leading: EditButton(),
                    trailing: Button(
                        action: {
                            withAnimation { Event.create(in: self.viewContext) }
                        }
                    ) { 
                        Image(systemName: "plus")
                    }
                )
            Text("Detail view content goes here")
                .navigationBarTitle(Text("Detail"))
        }.navigationViewStyle(DoubleColumnNavigationViewStyle())
    }
}

1 Ответ

2 голосов
/ 11 марта 2020

Я сделал свой собственный тест, используя этот код, упрощенный и немного измененный по сравнению с вашим:

struct ContentView: View {
    @Environment(\.managedObjectContext)
    var viewContext

    @Environment(\.verticalSizeClass) var vSizeClass
    @Environment(\.horizontalSizeClass) var hSizeClass

    var body: some View {
        NavigationView {
            Form {
                Section {
                    Text("My Content")
                }
            }
            .navigationBarTitle(Text(hSizeClass == .compact ? "Compact" : "Regular"))
        }
    }
}

Тестирование дает желаемые результаты в симуляторе:

iPhone 8 Plus : Компактная ширина в портретном режиме, Обычная ширина в альбомном режиме

Первоначально Заголовок навигации показывает «Компакт», но когда телефон поворачивается в горизонтальную ориентацию, заголовок обновляется, показывая «Обычный».

Просто убедитесь, что вы тестируете, используя устройства или симуляторы, класс горизонтального размера которых составляет обычный в некоторой ориентации.

Вот официальная документация по этой теме c, как указано в комментарии ОП. Он имеет удобную таблицу с перечнем классов размеров устройств в зависимости от их модели и физической ориентации:

Apple Developer - Руководство по интерфейсу пользователя: адаптивность и компоновка

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...