ios 为什么弹出初始NavigationStack路径项时单元格动画不同?

sq1bmfud  于 2023-02-26  发布在  iOS
关注(0)|答案(1)|浏览(143)

使用此测试应用程序:

import SwiftUI

enum Route
{
    case first
    case second
}

@main struct NavigatorApp : App
{
    @State private var path: [Route] = [.first]

    var body: some Scene
    {
        WindowGroup
        {
            NavigationStack(path: $path)
            {
                StartView()
            }
        }
    }
}

struct StartView : View
{
    var body: some View
    {
        Form
        {
            Section
            {
                NavigationLink(value: Route.first)
                {
                    Text("Go First")
                }
            }
        }
        .navigationTitle("Start")
        .navigationDestination(for: Route.self)
        { route in
            switch route
            {
            case .first:
                FirstView()

            case .second:
                SecondView()
            }
        }
    }
}

struct FirstView : View
{
    var body: some View
    {
        Form
        {
            Section
            {
                NavigationLink(value: Route.second)
                {
                    Text("Go Second")
                }
            }
        }
        .navigationTitle("First")
    }
}

struct SecondView : View
{
    @State private var hasOption: Bool = false

    var body: some View
    {
        Form
        {
            Section
            {
                Toggle("Some Option", isOn: $hasOption)
            }
        }
        .navigationTitle("Second")
    }
}

为什么第一次弹回到StartView时(当具有非空NavigationStack路径时)“Go First”单元格的取消选择动画不同/缺少/错误?
我能做点什么来弥补吗?
以下是意外“动画”的GIF(“Go First”单元格背景从灰色跳到白色):

下面是正常动画的GIF(“Go First”背景动画从灰色变为白色):

6l7fqoea

6l7fqoea1#

单元格取消选择不适合SwiftUI的状态驱动世界,所以我们只能接受视觉故障。当List/FormUITableView支持时效果更好,但自iOS 16以来,它由UICollectionView支持,后者总是有错误的行选择/取消选择动画。
如果你从NavigationStackView切换到NavigationSplitView,并在iPhone上测试折叠,你会发现它甚至更糟,根本没有动画。

相关问题