【问题标题】:SwiftUI How to stop the animation of List in Multi-level NavigationViewSwiftUI 如何在多级 NavigationView 中停止 List 的动画
【发布时间】:2020-01-16 18:11:18
【问题描述】:

当我在多级 NavigationView 中有一个多列表时,我只想停止动画。也许这不是“动画”,我只是想修复它。

在 Xcode 版本 11.3.1 (11C504) + iOS 13.2 上

代码很简单,你可以发现它是有线的。

import SwiftUI

struct TestView: View {
    var body: some View {
        NavigationView {
            List {
                ForEach(1...4, id: \.self) {_ in
                    NavigationLink(destination: AView()) {
                        Text("root")
                    }
                }
            }
        }
    }
}

struct AView: View {
    var body: some View {
        List {
            ForEach(1...4, id: \.self) {_ in
                NavigationLink(destination: BView()) {
                    Text("aview")
                }
            }
        }
    }
}

struct BView: View {
    var body: some View {
        List {
            ForEach(1...4, id: \.self) {_ in
                NavigationLink(destination: BView()) {
                    Text("bview")
                }
            }
        }
    }
}

struct TestView_Previews: PreviewProvider {
    static var previews: some View {
        TestView()
    }
}

【问题讨论】:

  • 如果您指的是过渡结束时的springs(在您的屏幕录制中),那么在我身边没有观察到这种情况。使用 Xcode 11.2 / iOS 13.2 测试。
  • @Asperi 我的环境是 Xcode 版本 11.3.1 (11C504) / iOS 13.2。 :(
  • 这是 swiftUI 中的已知错误。你可以在这里看到问题 - [stackoverflow.com/questions/58505286/…
  • 你在真机上试过了吗?有时,此类问题仅存在于 Xcode 中。
  • @Asperi 是的,当然,我在真机上试过。

标签: swiftui navigationlink


【解决方案1】:

好的...我已经安装了这个倒霉的 Xcode 11.3.1... 这是一个解决方案(或解决方法,无论如何) - 使用显式 .listRowInsets 如下例所示(顺便说一句,插入可以是任何值)

List {
    ForEach(1...1000, id: \.self) {_ in
        NavigationLink(destination: BView()) {
            Text("bview")
        }
    }
    .listRowInsets(EdgeInsets(top: 0, leading: 20, bottom: 0, trailing: 20))
}

适用于任何动态列表

【讨论】:

    猜你喜欢
    • 2021-01-24
    • 2021-08-03
    • 1970-01-01
    • 2020-04-03
    • 1970-01-01
    • 2021-11-06
    • 2020-03-26
    • 1970-01-01
    相关资源
    最近更新 更多