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")
    }

}
SybrSyn
источник

Ответы:

10

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

Работает с обеими формами и списками в стиле сгруппированных.

struct TestView: View {

    var body: some View {
        Form {
            Section(header: Text("")) {
                Text("Test View")
            }
        }
        .nvigationBarTitle("Test View")
    }
}
SybrSyn
источник
1
Пробовал оба решения в этом посте, все еще происходит. Что еще может происходить? Так странно.
Лкабо
0

У меня была эта проблема со списком, который был выдвинут через NavigationLink из списка GroupedListStyle. Когда вы делаете это, тогда кажется, что SwiftUI также считает выдвинутый список сгруппированным. Просто сбросьте listStyle должен работать в этом случае:

List { ... }.listStyle(DefaultListStyle())
retendo
источник