gpt4 book ai didi

ios - SwiftUI:将 LazyVStack 或 LazyHStack 放入 ScrollView 会导致卡顿(Apple 错误??)

转载 作者:行者123 更新时间:2023-12-05 00:22:25 45 4
gpt4 key购买 nike

XCode 版本 12.4 (12D4e)
每次我在 ScrollView 中实现 Lazy 堆栈时都会遇到这种情况:

  • 添加 LazyHStack到水平 ScrollViewLazyVStack垂直 ScrollView
  • 添加足够的内容以使 ScrollView 的内容大小超出其界限

  • 场景 1 - 将 ScrollView 拉到边界之外(就像拉动刷新一样)
    预期行为:它的行为与预期的 ScrollView 保持在您的手指下方相同
    观察到的行为:它口吃和跳跃
    场景 2 - 快速滚动到边缘,使其必须反弹
    预期行为:平稳反弹
    观察到的行为:它在到达边缘时停止并抖动,但不反弹
    我的理论
    我的理论是,由于使用了延迟堆栈,当 View 离开屏幕时,它会从 View 层次结构中删除,从而产生口吃。
    我想知道是否有其他人遇到过这种情况?这是 SwiftUI 中的错误吗?几个月来,我已经在不同的项目中可靠地复制了这一点,最终不使用我希望可以的 Lazy 堆栈。
    示例代码
            ScrollView {
    LazyVStack {
    ForEach(viewModel.items) { items in
    SomeView(viewModel: .init(context: viewModel.context, item: item))
    }
    }
    注意:口吃只发生在 ScrollView 的顶部
    ** 2021 年 7 月 10 日更新 **
    这仍在 iOS 15 版本 13.0 beta (13A5155e) 中发生。
    在下面的视频中,请注意滚动条的行为和我们到达底部时的卡顿:
    https://youtu.be/z2pybl5yYqk
    ** 2021 年 7 月 19 日更新 **
    我把我认为的所有东西都撕掉了,然后一个一个地重建起来——我一输入 VStack/HStack/ZStack,LazyVStack 就开始卡顿了。围绕一个简单的 Text元素。
    如果我添加 fixedSize(horizontal: false, vertical: true)Text元素它似乎停止了口吃。只要我添加 UIViewRepresentable高度可变,它又开始结巴了。
    似乎在 LazyStack 中,每个 child 都需要某种固定大小或纯粹的 SwiftUI View 才能工作。
    我会继续挖掘。必须...解决...

    最佳答案

    我收到了 DTS 的回复,他们确认这是一个错误,但没有解决方法。您可以引用我的反馈 ID 并提交反馈项目。我想他们会用新的 swift 版本解决这个问题,因为我认为这可能是一个遗留缺陷,并且可能会导致重大更改。换句话说,它与原生组件和导航栏有关,他们必须打破一些东西来修复它。这意味着 iOS 14 中的 SwiftUI 应用程序可能永远不兼容。但我只是推测。如果我得到任何消息,我会告诉所有人。这确实是一个主要的障碍,完全破坏了 IMO 的用户体验。

    关于ios - SwiftUI:将 LazyVStack 或 LazyHStack 放入 ScrollView 会导致卡顿(Apple 错误??),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66523786/

    45 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com