使用此测试应用程序:
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”背景动画从灰色变为白色):
1条答案
按热度按时间6l7fqoea1#
单元格取消选择不适合SwiftUI的状态驱动世界,所以我们只能接受视觉故障。当
List
/Form
由UITableView
支持时效果更好,但自iOS 16以来,它由UICollectionView
支持,后者总是有错误的行选择/取消选择动画。如果你从
NavigationStackView
切换到NavigationSplitView
,并在iPhone上测试折叠,你会发现它甚至更糟,根本没有动画。