SwiftUI Form и StackNavigationViewStyle запускают Berserk - PullRequest
1 голос
/ 24 января 2020

У меня есть NavigationView с Form, содержащим Picker и NavigationLink, и я хочу использовать navigationViewStyle(StackNavigationViewStyle()). При запуске fre sh в портретном режиме он ведет себя как ожидалось. Но после поворота устройства в альбомную ориентацию и возврата в портретную ориентацию и нажатия на NavigationLink оно загружает несколько копий целевого представления, а затем возвращается в исходное представление, как показано здесь:

UI *

Это происходит на физическом устройстве и в симуляторе.

Если я удаляю navigationViewStyle(StackNavigationViewStyle()), эта проблема не возникает, но я бы предпочел иметь ее.

Я свел проблему к этому примеру кода. Это выполняется в бесплатном sh проекте SwiftUI, без изменений в стандартном SceneDelegate.

import SwiftUI

struct ContentView: View {

    var body: some View {
        NavigationView{
            Form{

                NavigationLink(destination: DestinationView()) {
                    Text("NavigationLink")
                }

            }.navigationBarTitle("ContentView")

        }.navigationViewStyle(StackNavigationViewStyle())
    }
}

struct DestinationView: View {
    var body: some View {
        Text("Destination")
            .navigationBarTitle("DestinationView")
    }
}

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

Визуальный отладчик

Есть дубликаты представления друг за другом. С каждым поворотом туда-сюда добавляются еще.

Я гуглил и искал Stackoverflow, не найдя решения.

1 Ответ

1 голос
/ 25 января 2020

В настоящее время (Xcode 11.3.1), кажется, есть ошибка в Form, создающая новую копию представления при каждом изменении ориентации устройства.

Пример кода:

import SwiftUI

struct ContentView: View {
    var body: some View {
            Form{
                Text("Text")
            }
    }
}

Визуальный отладчик в начале, поверните влево, а затем поверните вправо:

Visual debugger

A Form автоматически принимает GroupedListStyle и он Кажется, что на самом деле это ошибка. Потому что List с GroupedListStyle показывает то же поведение в визуальном отладчике.

import SwiftUI

struct ContentView: View {

    var body: some View {
        List{
            Text("Text")
        }.listStyle(GroupedListStyle())
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...