SwiftUI переглядати макет вмісту несподівано з’являється / стрибає?


16

Під час переходу до нового виду з формою або списком (згрупованим) вміст з’являється приблизно на чверть шляху вниз від нижньої частини заголовка перегляду навігації, а потім «вискакує» до потрібного місця приблизно на півтори секунди пізніше. Дуже огидний. Не впевнений, що це помилка SwiftUI чи я щось неправильно структурую?

Я перевірив це як на тренажері, так і на пристрої з однаковими результатами.

Я думаю, що це має щось спільне з тим, як обробляються навігаційні посилання? Кожне навігаційне посилання викликає init () на його цільовому вікні, коли з'являється ContentView. Для мене це не має сенсу, чи не слід називати пункт призначення init () лише в момент, коли користувач фактично натисне посилання навігації?

Я також спробував це з аркушем, і проблема не існує в аркушах, лише коли використовуються навігаційні посилання з формами або списками, стилізованими як згруповані.

Код із абсолютно нової програми для єдиного перегляду:

struct ContentView: View {

    var body: some View {
        NavigationView {
            NavigationLink(destination: TestView()) {
                Text("Test Link")
            }
        .navigationBarTitle("Content View")
        }
    }

}

struct TestView: View {

    var body: some View {
        Form {
            Text("Test View")
        }
        .navigationBarTitle("Test View")
    }

}

Відповіді:


10

Надання розділу з текстом заголовка виправляє проблему, навіть якщо текст порожній. Хоча це залишить проміжок між заголовком навігації та першим рядком.

Працює з обома формами та списками, стилізованими як згруповані.

struct TestView: View {

    var body: some View {
        Form {
            Section(header: Text("")) {
                Text("Test View")
            }
        }
        .nvigationBarTitle("Test View")
    }
}

Спробували обидва рішення на цій посаді, як і раніше. Що ще може бути? Так дивно.
Лкабо

0

У мене була ця проблема зі списком, який був висунутий через NavigationLink зі списку GroupedListStyle. Коли ви це зробите, то здається, що SwiftUI також вважає висунутий список згрупованим. В цьому випадку просто скидання listStyle має працювати:

List { ... }.listStyle(DefaultListStyle())
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.